【问题标题】:Handle an Event From a ResourceDictionary处理来自 ResourceDictionary 的事件
【发布时间】:2018-05-07 11:14:32
【问题描述】:

我有 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 事件呢?

【问题讨论】:

  • A ResourceDictionary 可以像 Windows 一样有代码,你可以添加一个事件处理程序并从那里调用 textchanged。
  • 找到aTBox元素后,添加事件处理程序:aTBox.TextChanged += (sender, e) =&gt; { /*Do Smth*/};

标签: c# wpf xaml


【解决方案1】:

ResourceDictionary 可以像 Windows 一样有代码,您可以添加一个事件处理程序并从那里调用 textchanged,例如:

  1. ResourceDictionary 的同一文件夹中的 Visual Studio 中添加一个新类
  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

更多详情可以查看Fredrik Hedblad's Answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多