gpt4 book ai didi

c# - TextBlock 重写样式的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 12:32:43 24 4
gpt4 key购买 nike

几天前,我遇到了 Button 内文本的奇怪行为(我猜其他 ContentControl 也会遇到同样的行为)。让我解释一下情况。我在 App.xaml 中为 TextBlock 定义了样式:

<Application.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="10"/>
</Style>
</Application.Resources>

在 MainWindow.xaml 中我有相同的样式定义,它应该覆盖 App.xaml 中定义的样式。我在窗口中也有 3 个按钮。在第一个按钮中,在按钮内容中明确定义了 TextBlock 控件。对于第二个按钮,我将一个字符串设置为代码隐藏中的内容。对于第三个按钮,我将一个整数值设置为代码隐藏中的内容。这是 MainWindow.xaml 的代码:

<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="0"/>
</Style>
</StackPanel.Resources>
<Button Name="Button1">
<Button.Content>
<TextBlock Text="Button with text block"/>
</Button.Content>
</Button>
<Button Name="Button2" />
<Button Name="Button3" />
</StackPanel>

和 MainWindow.xaml.cs:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
Button2.Content = "Button with string";
Button3.Content = 16;
}

现在我们看到了什么?正如预期的那样,第一个和第三个按钮中的文本的边距为 0px,但第二个按钮中的文本的边距为 10px!问题是:为什么第二个按钮有 10px 边距以及如何为第二个按钮设置零边距(无法从 App.xaml 中删除样式)?

谢谢!

最佳答案

当我改变

Button2.Content = "Button with string"; 

Button2.Content = "Button with _string"; 

按钮的边距从 10 变为 0。

这是 WPF 中的一个错误;已经在Microsoft Connect上报道过.

我不是 100% 确定,但我认为您看到的行为是由相同的根本原因引起的。

顺便说一句:正确的行为是按钮 2 和 3 的 Margin=10;这是因为资源查找是沿着逻辑树执行的,而不是沿着可视化树执行的。按钮 2 和 3 中的 TextBlock 不在 StackPanel 的逻辑树中。

关于c# - TextBlock 重写样式的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963562/

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