Переопределение базовых элементов управления Silverlight для отображения только текста - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь создать пользовательские элементы управления, основанные на элементах управления инфраструктуры, которые имеют дополнительные функции визуализации себя как TextBlock.Я делаю это потому, что встроенные свойства IsEnabled или IsReadOnly не соответствуют моим потребностям.Тем не менее, я не вижу никаких переопределенных методов в элементе управления, которые бы дали мне необходимую функциональность.Если нет, есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 01 декабря 2011

Хорошо, этот пример собран вместе - имейте это в виду. Вы заметите, что я использую некоторые средства управления 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;
        }

    }
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...