覆盖基础Silverlight控件以仅显示文本

时间:2011-11-29 22:52:54

标签: silverlight-4.0

我正在尝试创建从框架控件派生的自定义控件,这些控件具有将自身渲染为TextBlock的附加功能。我这样做是因为内置的IsEnabled或IsReadOnly属性不符合我的需要。但是,我没有看到控件中有任何可覆盖的方法可以提供我需要的功能。

我走向正确的道路吗?如果没有,有更好的方法吗?

1 个答案:

答案 0 :(得分: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;
        }

    }
}

希望有所帮助!