为什么WPF使用对角线分割呈现我的控件?
WPF似乎在对角拆分我的控件。我做错了什么?问题在蓝色按钮上更清楚,但在右侧的按钮上仍然很明显 奇怪的是,kaxaml正确地渲染了按钮。WPF设计师似乎从来没有这样做过。当我在独立的“WpfApplication1”中运行示例代码时,它会正确呈现。然而,在我的应用程序中,我得到了对角线“cut”。可能值得一提的是,在运行时WPF似乎没有始终如一地应用切片效果,有时它们会正确渲染 更新1: 线索!这只会影响按钮!当我创建一个独立的为什么WPF使用对角线分割呈现我的控件?,wpf,xaml,Wpf,Xaml,WPF似乎在对角拆分我的控件。我做错了什么?问题在蓝色按钮上更清楚,但在右侧的按钮上仍然很明显 奇怪的是,kaxaml正确地渲染了按钮。WPF设计师似乎从来没有这样做过。当我在独立的“WpfApplication1”中运行示例代码时,它会正确呈现。然而,在我的应用程序中,我得到了对角线“cut”。可能值得一提的是,在运行时WPF似乎没有始终如一地应用切片效果,有时它们会正确渲染 更新1: 线索!这只会影响按钮!当我创建一个独立的边框并将标签作为其内容时,没有切片效果?!?!!所以这不是xam
边框
并将标签作为其内容时,没有切片效果?!?!!所以这不是xaml本身,而是按钮的神奇之处?!大声想一想,这与不完全覆盖默认按钮模板有关吗
更新2:
嗯,这一点越来越奇怪了。这与阴影效果有关。似乎要绘制的第一种具有效果的控件类型(BitmapEffect或wpf 4.0效果)与该类型的所有其他控件实例一样被拆分。例如,这里有一个带有可爱的红色阴影的日期选择器,它沿对角线分割日期选择器控件,之后的按钮很好,尽管也对其应用了效果如果不应用效果,则不会分割任何控件。如果我画了一个有效果的控件,这个控件将被拆分,不同类型的后续控件也可以。但是,如果有两个或三个相同类型的控件,它们也会被拆分。也就是说,如果一个按钮被拆分,页面上的所有按钮也将被拆分 这一定与我的GPU或图形驱动程序有关。今天早上我更新了,但没有乐趣。(我使用的是Radeon Mobility HD 5650,V8.683.2.0)。如果这个问题仅限于我的电脑,我想这不是世界末日。也许,我可以在它自己的游戏中击败它,在每一页顶部的随机路径像素上画一个透明的效果或者其他什么 更新3 哦,天哪。我现在已经在另一台电脑上复制了它,所以它不是我的图形卡或驱动程序
正常的
IsDefault
尝试按如下方式安排嵌套:
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
...
</StackPanel.Resources>
<Button>Normal</Button>
<Button IsDefault="True">IsDefault</Button>
</StackPanel>
...
正常的
IsDefault
如果只是设计师,你就无能为力了。对角线看起来很像将一个矩形分割成两个三角形以在GPU上渲染是错误的。这可能是由设计者或图形卡驱动程序引起的。这可能是一个简单的舍入错误
它是否显示了设计师的所有缩放级别?我找到了解决问题的方法。这种解决方法毫无意义,但似乎可以消除拼接效果 简而言之,我的应用程序是一个选项卡式界面(MDI)。我有一个样式化的tabcontrol,它承载我应用程序中的所有其他控件。在tabstrip中,我有一个样式化的按钮,它创建了一个新的选项卡(与拼接按钮的样式不同) 如果我从“添加选项卡”按钮中删除专家样式,保留默认样式,拼接效果将从我应用程序中的其他按钮中消失。这两种按钮样式保存在同一个ResourceDictionary中,该ResourceDictionary合并到my app.xaml ResourceDictionary中。也许这是一个线索,但我不明白它的意义 此外,如果在“添加选项卡”按钮之前将带有样式的标签插入选项卡条,则无论“添加选项卡按钮”的样式如何,拼接效果都会消失。如果我只是添加没有命名样式的标签,拼接效果就会恢复 标签或“添加选项卡”按钮似乎都无法获得拼接效果。但是,通过更改其样式,可以控制拼接效果是否显示在其他按钮上
我只能断定这是WPF中的一个错误,因为我想不出一个合理的理由来解释为什么更改一个控件的样式会对其他控件的渲染产生任何影响。这是由于WPF和ATI图形驱动程序之间的一些微妙交互导致的错误。在像素边界上未完全定位的元素上使用DropShadowEffect时,似乎会发生这种情况 如果在有问题的元素(或以适当的样式)上设置UseLayoutRounding=“True”,则在很多情况下(尽管不是所有情况下)似乎都可以解决问题。要做的另一件事是确保您没有故意将元素定位在半像素处(例如,通过使用分数边距-如果在Expression Blend中移动元素,可能会发生这种情况) 下面是一个简单的复制案例:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Width" Value="28"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Border" Background="Transparent">
<Grid Margin="{TemplateBinding Padding}">
<ContentPresenter x:Name="contentPresenter" VerticalAlignment="Center"
HorizontalAlignment="Center">
<ContentPresenter.Effect>
<DropShadowEffect BlurRadius="13" Color="Black" Opacity="1" ShadowDepth="0" Direction="0"/>
</ContentPresenter.Effect>
</ContentPresenter>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<Button x:Name="MinimizeButton"
Style="{StaticResource ButtonStyle}">
<Rectangle x:Name="MinimizeIcon"
Width="11"
Height="2"
HorizontalAlignment="Center"
Margin="0,7,0,0"
VerticalAlignment="Bottom"
Stroke="Gray"
StrokeThickness="2"/>
</Button>
</Grid>
</UserControl>
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Width" Value="28"/>
<Setter Property="Height" Value="28"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Border" Background="Transparent">
<Grid Margin="{TemplateBinding Padding}">
<ContentPresenter x:Name="contentPresenter" VerticalAlignment="Center"
HorizontalAlignment="Center">
<ContentPresenter.Effect>
<DropShadowEffect BlurRadius="13" Color="Black" Opacity="1" ShadowDepth="0" Direction="0"/>
</ContentPresenter.Effect>
</ContentPresenter>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<Button x:Name="MinimizeButton"
Style="{StaticResource ButtonStyle}">
<Rectangle x:Name="MinimizeIcon"
Width="11"
Height="2"
HorizontalAlignment="Center"
Margin="0,7,0,0"
VerticalAlignment="Bottom"
Stroke="Gray"
StrokeThickness="2"/>
</Button>
</Grid>
</UserControl>