【发布时间】: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) => { /*Do Smth*/};