【发布时间】:2017-01-14 23:40:04
【问题描述】:
我推出了我自己的“拆分按钮”,它由一个按钮、扩展器和带有 1-N 个按钮的弹出窗口组成。现在,尽管按钮的样式为 BorderThickness="0",但弹出窗口中的按钮周围的边框非常粗。所以可能设置了边框,因为按钮在弹出窗口中。我的问题是:如何覆盖边框,使所有其他 Button 样式的“属性”都不会被覆盖?
<Popup
IsOpen="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:SplitButton}}, Path=IsExpanded}"
PlacementTarget="{Binding ElementName=Button}"
PopupAnimation="Fade"
StaysOpen="False"
>
<Popup.Resources>
<Style TargetType="Border">
<Setter Property="BorderThickness" Value="0" />
</Style>
</Popup.Resources>
<ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:SplitButton}}, Path=ItemsSource}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Converter={ui:ConvertObjectToResource}}" Tag="{Binding}" Click="Control_Click" BorderThickness="0"
Width="{Binding ActualWidth, ElementName=WidthButton}">
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Popup>
编辑:我实际上可以这样做:
<Popup.Resources>
<Style TargetType="Button">
<Setter Property="BorderThickness" Value="0" />
</Style>
</Popup.Resources>
不幸的是,这会覆盖按钮的所有其他样式属性(如填充和背景、前景)。
我也可以这样做:
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Converter={ui:ConvertObjectToResource}}" Tag="{Binding}" Click="Control_Click"
Width="{Binding ActualWidth, ElementName=WidthButton}">
<Button.Style>
<Style TargetType="Button">
<Setter Property="BorderThickness" Value="0"></Setter>
<Setter Property="BorderBrush" Value="Transparent"></Setter>
</Style>
</Button.Style>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
但也会覆盖按钮的样式。如果我尝试通过设置 BasedOn="ButtonsNormalStyleHere" 来解决这个问题,边框会再次出现,即 BorderThickness 和 BorderBrush 无效。
【问题讨论】:
-
运行你的代码results 对我来说没有边界的按钮。可能你有一些风格干扰......
-
是的。我当然有自己的风格。但不知道是什么风格。我只是想覆盖它。
-
嗯,这完全是另一个问题。我无法重现您描述的问题。为问题添加缺失的样式。
-
我不明白你的意思。也许我问错了问题,我更新了问题。我不会质疑 Button 的整个样式,因为它是 350 行,并且在我想要覆盖 BorderThickness/BorderBrush 时完全无关紧要。也是这种风格 BorderThickness="0".
-
我的意思是缺少Minimal, Complete, and Verifiable example。没有它,我无法在本地重现问题,所以我只能猜测发生了什么。顺便说一句,看看precedence order,它与覆盖某些属性值有关。