【问题标题】:WPF Putting a Button on a LabelWPF 在标签上放置一个按钮
【发布时间】:2009-10-20 22:04:04
【问题描述】:

我有一个标签列表框,每个标签都绑定到一个 LabelName 和 LabelColor。我想添加一个类似于“X”的小按钮并将其附加在标签的右侧。我希望它看起来无缝,就像 X 非常非侵入性一样。任何想法如何做到这一点? <Label.ContentTemplate> 之间的东西不起作用。我什至不希望它看起来像一个可点击的按钮,只是一个“X”,你可以点击它来触发一个按钮点击事件。

<DataTemplate x:Key="LabelsListDataTemplate">
        <Border>
            <StackPanel Orientation="Horizontal">
                <Label Margin ="3,5,3,5" BorderThickness="1" BorderBrush="Black" 
                           Background="{Binding Path=DefaultColor}"
                           Content="{Binding Path=LabelName}">
                    <Label.ContentTemplate>
                        <DataTemplate>
                            <Button Background="{Binding Path=DefaultColor}" Content="X" />
                        </DataTemplate>
                    </Label.ContentTemplate>
                </Label>
            </StackPanel>
        </Border>
    </DataTemplate>

【问题讨论】:

    标签: wpf button label


    【解决方案1】:

    为什么要在控件模板中添加按钮。检查以下代码是否有效。

    <DataTemplate x:Key="LabelsListDataTemplate">
        <Border>
            <StackPanel Orientation="Horizontal">
                <Label Margin ="3,5,3,5" BorderThickness="1" BorderBrush="Black" 
                           Background="{Binding Path=DefaultColor}"
                           Content="{Binding Path=LabelName}"/>
                  <Button Background="{Binding Path=DefaultColor}" Content="X" />               
            </StackPanel>
        </Border>
    </DataTemplate>
    

    【讨论】:

    • 我同意 Jobi Joy 的观点。使用您的代码,您实际上会将标签设置为有一个按钮,而不是文本 一个按钮。如果您希望按钮是非侵入式的,则必须更改其 ControlTemplate。
    【解决方案2】:

    太好了,效果很好。我稍微调整了一下,让“X”按钮与标签本身看起来更加齐平和自然,如下所示:

    <DataTemplate x:Key="LabelsListDataTemplate">
        <Border>
            <StackPanel Orientation="Horizontal">
                <Label Margin ="3,5,0,5" BorderThickness="1" BorderBrush="Black" Name="RowLabel" 
                           Background="{Binding Path=DefaultColor}"
                           Content="{Binding Path=LabelName}"></Label>
                <Button Background="{Binding Path=DefaultColor}" Content="X" Height="{Binding ElementName=RowLabel, Path=ActualHeight}"
                        Margin="0,5,3,5" />
            </StackPanel>
        </Border>
    </DataTemplate>
    

    我基本上将按钮的高度设置为标签的高度。然后我做了一些边缘捏造,让它们彼此相邻出现。感谢您的帮助!

    【讨论】:

    • 我建议在 StackPanel 的位置使用网格然后你不需要在那里做 ActualHeight elementBinding
    猜你喜欢
    • 2022-08-24
    • 2023-03-16
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多