2011-11-29 65 views
0

我想創建自定義控件派生自框架控件,它們具有將自己渲染爲TextBlock的附加功能。我這樣做是因爲內置的IsEnabled或IsReadOnly屬性不符合我的需要。但是,在控件中沒有看到任何可重寫的方法,這些方法可以提供我所需的功能。覆蓋基地Silverlight控件只顯示文本

我走向正確的道路嗎?如果沒有,有沒有更好的方法來做到這一點?

+0

您是否考慮過使用數據模板?您可以讓數據模板選擇器根據任何條件選擇正確的數據模板。一個模板可以用於只讀,另一個用於可編輯...例如。 – tsiorn

+0

你有一個例子嗎? –

+0

你能告訴我們你的需求是什麼嗎?爲什麼普通的'TextBlock'不起作用? –

回答

0

好吧,這個例子被扔在一起 - 記住這一點。你會注意到我正在使用一些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; 
     } 

    } 
} 

希望幫助!