【问题标题】:How to override ONLY border settings (thickness/brush) for stack of buttons in WPF Popup?如何仅覆盖 WPF Popup 中按钮堆栈的边框设置(厚度/画笔)?
【发布时间】: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,它与覆盖某些属性值有关。

标签: wpf xaml wpf-style


【解决方案1】:

“粗黑边框”实际上是 PopUp 的背景,这是因为按钮边距而看到的 -> 我完全是白痴。

【讨论】:

  • 考虑到我们都去过那里,+1:P
猜你喜欢
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2020-11-05
  • 2011-11-06
  • 2011-02-27
相关资源
最近更新 更多