0
我想創建自定義控件派生自框架控件,它們具有將自己渲染爲TextBlock的附加功能。我這樣做是因爲內置的IsEnabled或IsReadOnly屬性不符合我的需要。但是,在控件中沒有看到任何可重寫的方法,這些方法可以提供我所需的功能。覆蓋基地Silverlight控件只顯示文本
我走向正確的道路嗎?如果沒有,有沒有更好的方法來做到這一點?
我想創建自定義控件派生自框架控件,它們具有將自己渲染爲TextBlock的附加功能。我這樣做是因爲內置的IsEnabled或IsReadOnly屬性不符合我的需要。但是,在控件中沒有看到任何可重寫的方法,這些方法可以提供我所需的功能。覆蓋基地Silverlight控件只顯示文本
我走向正確的道路嗎?如果沒有,有沒有更好的方法來做到這一點?
好吧,這個例子被扔在一起 - 記住這一點。你會注意到我正在使用一些telerik控件......但是你應該能夠獲得即將做的事情的要點。此外,在這個例子中,我扔在一起,即時通訊不使用DataTemplateSelector ...只是在後面的代碼中選擇模板。
XAML的草圖......
<UserControl x:Class="Admin.ManagePositions"
...
Title="MainWindow"
Width="525"
Height="350">
<UserControl.Resources>
<DataTemplate x:Key="ReadPositionTemplate">
<StackPanel>
<TextBlock Text="{Binding PositionCode}" Style="{StaticResource H5}" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<telerik:RadButton x:Name="btnEdit" Content="Edit" Click="btnEdit_Click" Command="{Binding DataContext.EditPositionCommand, ElementName=ucManagePositions}" />
<telerik:RadButton x:Name="btnDelete" Content="Delete Position" Style="{StaticResource AutoSizeButton}" Click="btnDelete_Click" Command="{Binding DataContext.DeletePositionCommand, ElementName=ucManagePositions}" />
</StackPanel>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="EditPositionTemplate">
<StackPanel>
<sdk:Label Target="{Binding ElementName=txtPositionCode}" />
<TextBox x:Name="txtPositionCode" Text="{Binding PositionCode, Mode=TwoWay, ValidatesOnExceptions=True,NotifyOnValidationError=True}" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<telerik:RadButton x:Name="btnSaveEdit" Content="Save" Click="btnSaveEdit_Click" Command="{Binding DataContext.SavePositionCommand, ElementName=ucManagePositions}" />
<telerik:RadButton x:Name="btnCancelEdit" Content="Cancel" Click="btnCancelEdit_Click" Command="{Binding DataContext.ResetHighlightPositionCommand, ElementName=ucManagePositions}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid>
<telerik:RadTransitionControl x:Name="selectedPositionContainer" Loaded="selectedPositionContainer_Loaded" Content="{Binding HighlightedPosition}">
<telerik:RadTransitionControl.Transition>
<telerik:SlideAndZoomTransition />
</telerik:RadTransitionControl.Transition>
</telerik:RadTransitionControl>
</Grid>
</UserControl>
和代碼的一個粗略的輪廓背後:
namespace Admin
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class ManagePositions : UserControl {
public MainWindow()
{
InitializeComponent();
}
private void btnEdit_Click(object sender, RoutedEventArgs e)
{
DataTemplate dt = ucManagePositions.Resources["EditPositionTemplate"] as DataTemplate;
selectedPositionContainer.ContentTemplate = dt;
}
private void btnCancelEdit_Click(object sender, RoutedEventArgs e)
{
DataTemplate dt = ucManagePositions.Resources["ReadPositionTemplate"] as DataTemplate;
selectedPositionContainer.ContentTemplate = dt;
}
private void selectedPositionContainer_Loaded(object sender, RoutedEventArgs e)
{
DataTemplate dt = ucManagePositions.Resources["ReadPositionTemplate"] as DataTemplate;
selectedPositionContainer.ContentTemplate = dt;
}
}
}
希望幫助!
您是否考慮過使用數據模板?您可以讓數據模板選擇器根據任何條件選擇正確的數據模板。一個模板可以用於只讀,另一個用於可編輯...例如。 – tsiorn
你有一個例子嗎? –
你能告訴我們你的需求是什麼嗎?爲什麼普通的'TextBlock'不起作用? –