ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-04 08:52:01  阅读:576  来源: 互联网

标签:c styles wpf textblock


几天前我在Button中遇到了奇怪的文本行为(我猜其他ContentControls的行为也是如此).让我解释一下情况.我在App.xaml中为TextBlock定义了一个样式:

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

在MainWindow.xaml中,我有相同的样式定义,它应该覆盖在App.xaml中定义的样式.我在Window中有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报道了.

我不是百分百肯定,但我认为你看到的行为是由相同的根本原因引起的.

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

标签:c,styles,wpf,textblock
来源: https://codeday.me/bug/20190704/1375589.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有