Обрабатывать событие из ResourceDictionary - PullRequest
0 голосов
/ 07 мая 2018

У меня есть 8 пользовательских радиокнопок в стиле, показанном ниже

<Style x:Key="RadioSubMenuTbox" TargetType="{x:Type RadioButton}">
    <Setter Property="Foreground" Value="#FFFFFF"/>
    <Setter Property="Height" Value="35"/>
    <Setter Property="FontSize" Value="18"/>
    <Setter Property="FontFamily" Value="{StaticResource fontIbtisam}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type RadioButton}">
                <Border Name="brdMenu" CornerRadius="0" Background="#20000000" BorderBrush="White" BorderThickness="0" Padding="1">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="auto"/>
                        </Grid.ColumnDefinitions>
                        <ContentPresenter x:Name="RadioContentPresenter" Content="{TemplateBinding Content}" VerticalAlignment="Center" HorizontalAlignment="Center">
                            <ContentPresenter.Resources>
                                <Style TargetType="TextBlock">
                                    <Setter Property="TextAlignment" Value="Center" />
                                </Style>
                            </ContentPresenter.Resources>
                        </ContentPresenter>
                        <TextBox Name="txtM" Visibility="Collapsed" Margin="0,5,4,5" Style="{StaticResource txtboxDefaultNoShadow}" Grid.Column="1" Width="100"/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter TargetName="txtM" Property="Visibility" Value="Visible" />
                        <Setter TargetName="brdMenu" Property="Background" Value="#F2826A" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="brdMenu" Property="BorderBrush" Value="#F2826A"/>
                        <Setter TargetName="brdMenu" Property="TextElement.Foreground" Value="White"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Когда RadioButton IsChecked текстовое поле внутри RadioButton становится видимым, теперь стиль находится в файле ResourceDictionary, и я хочу обработать событие TextChanged каждого текстового поля.

Я могу получить доступ к TextBox следующим образом

TextBox aTBox = (TextBox)MyRButton.Template.FindName("txtM", MyContentControl);

Но как обработать событие TextChanged?

1 Ответ

0 голосов
/ 07 мая 2018

A ResourceDictionary может иметь код, как и Windows, вы можете добавить обработчик событий и вызвать оттуда измененный текст, например:

  1. Добавить новый класс в Visual Studio в той же папке, что и ваш ResourceDictionary
  2. Добавить атрибут x:Class в файл XAML

    <ResourceDictionary x:Class="YourNameSpace.YourClass"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
  3. Теперь добавьте обработчик событий в ваш TextBox txtM

Для более подробной информации вы можете проверить Ответ Фредрика Хедблада

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