我最近在堆栈溢出的帮助下解决了一个样式问题...(您可以在我的历史记录中查看问题/答案)
因此,我想出了以下样式以应用于特定的文本框。
<!--Expanding text box with the max width in the tag property-->
<!---->
<!--Will not work with password box!!-->
<Style TargetType="{x:Type TextBox}"
x:Key="ExpandingTextBoxMaxWidthInTag">
<Setter Property="OverridesDefaultStyle"
Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*">
<ColumnDefinition.MaxWidth>
<Binding Path="Tag"
RelativeSource="{RelativeSource TemplatedParent}">
</Binding>
</ColumnDefinition.MaxWidth>
</ColumnDefinition>
<ColumnDefinition Width="0*" />
</Grid.ColumnDefinitions>
<TextBox>
<TextBox.Text>
<Binding Path="Text"
RelativeSource="{RelativeSource TemplatedParent}" />
</TextBox.Text>
<TextBox.MaxWidth>
<Binding Path="Tag"
RelativeSource="{RelativeSource TemplatedParent}" />
</TextBox.MaxWidth>
</TextBox>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
(代码清单 1)
然后我将其应用于我的代码中的文本框,如下所示......
<TextBox Tag="150"
Text="{Binding Path=Username}"
Style="{StaticResource ExpandingTextBoxMaxWidthInTag}" />
(代码清单 2)
我必须强调,正如所写的那样,这段代码可以按需要工作。当我将UpdateSourceTrigger=PropertyChanged添加到Text属性的绑定中时,就会出现问题...
<TextBox Tag="150"
Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource ExpandingTextBoxMaxWidthInTag}" />
(代码清单 3)
清单 3 中的代码有一个例外:更新源触发器没有正确触发。它不会在每次击键时触发(就像没有应用样式一样),它仅在失去焦点事件时触发(默认值)。
我不能简单地在样式中显式应用“PropertyChanged”,因为我需要将样式应用于一堆文本框,这些文本框对更新源触发器有不同的需求。
如何在我的 xaml 中获取指定的更新源触发器以过滤到我的样式?