gpt4 book ai didi

c# - UpdateSourceTrigger 未应用于样式化控件

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:10 24 4
gpt4 key购买 nike

我最近在 stack overflow 的帮助下解决了一个样式问题...(您可以在我的历史记录中看到问题/答案)

因此,我想到了以下应用于特定文本框的样式。

<!--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>

(代码 list 1)

然后我将其应用到我的代码中的文本框......

<TextBox Tag="150"
Text="{Binding Path=Username}"
Style="{StaticResource ExpandingTextBoxMaxWidthInTag}" />

(代码 list 2)

我必须强调,正如所写的那样,这段代码可以按预期工作。当我将 UpdateSourceTrigger=PropertyChanged 添加到 Text 属性的绑定(bind)时,问题就出现了...

<TextBox Tag="150"
Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource ExpandingTextBoxMaxWidthInTag}" />

(代码 list 3)

list 3 中的代码有一个异常(exception):更新源触发器没有正确触发。它不会在每次击键时触发(就像没有应用样式时一样),它只会在失去焦点事件时触发(默认)。

我不能简单地在样式中显式应用“PropertyChanged”,因为我需要将样式应用到一堆对更新源触发器有不同需求的文本框。

如何在我的 xaml 中获取指定的更新源触发器以过滤到我的样式?

最佳答案

您用您的样式覆盖了“文本”属性,因此也覆盖了“UpdateSourceTrigger=PropertyChanged”部分,不是吗?只需删除样式中的“文本”属性绑定(bind),我认为这应该可以正常工作。

关于c# - UpdateSourceTrigger 未应用于样式化控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16281513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com