【问题标题】:How to make label on the same level as checkbox, but not toggle on label click in WPF?如何使标签与复选框处于同一级别,但不在WPF中的标签单击上切换?
【发布时间】:2018-10-29 20:24:13
【问题描述】:

我想制作只有直接点击复选框才会切换的复选框列表。

不幸的是,如果我这样做:

                    <ListBox Name="LanguagesListBox">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <ListBoxItem>
                                    <StackPanel Orientation="Horizontal">
                                        <CheckBox/>
                                        <Label Content="{Binding InputLanguage.LayoutName}"/>
                                    </StackPanel>

                                </ListBoxItem>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

我得到的复选框未与其标签垂直对齐:

但如果我写

                  <ListBox Name="LanguagesListBox">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <ListBoxItem>
                                    <StackPanel Orientation="Horizontal">
                                        <CheckBox Content="{Binding InputLanguage.LayoutName}"/>

                                    </StackPanel>

                                </ListBoxItem>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

如果点击标签,我会得到复选框切换

如何同时获得?

【问题讨论】:

  • 您可以使用单独的标签,只需尝试更改每个标签的属性以更好地对齐,例如VerticalContentAlignmentVerticalAlignment。您还可以分别调整MarginPadding

标签: wpf xaml checkbox


【解决方案1】:

这是复选框行为,因此您无法更改它。 您必须创建一个用户控件来构建它。

【讨论】:

    【解决方案2】:

    摆脱ListBoxItem,将Label 替换为TextBlock,并将其VerticalAlignment 属性设置为Center

    <ListBox Name="LanguagesListBox">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <CheckBox/>
                    <TextBlock Text="{Binding InputLanguage.LayoutName}" VerticalAlignment="Center" Margin="2,-1,0,0"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    

    您可以调整TextBlockMargin 属性以进一步调整其位置。

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2016-12-14
      • 2018-10-16
      相关资源
      最近更新 更多