0

ListBox一度に1 つだけを選択し、選択したままにし、選択を解除できるようにする必要があるため、水平 (おそらくもっと良い方法があります) を使用して一種のナビゲーション バーを作成しています。その作業を行うために、私はを使用していToggleButtonます。

問題は、ボックスに収まるようにコンテンツを「ストレッチ」して、選択領域の任意の場所をクリックしてトグルボタンを使用して選択を解除できるようにすることです。

私の問題は、ストレッチのためにボタンが上に配置されていることです。ストレッチを使用しているときにボタンを垂直方向に中央揃えにすることはできますか? それらを同時に中央に配置しようとすると、ボタン自体が再び中央に縮小される正方形に戻ります。

<ListBox Grid.Row="0" Grid.Column="0" ItemsSource="{Binding PageViewModels}" SelectedItem="{Binding CurrentPageViewModel}" Style="{StaticResource MenuStyle}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="Padding" Value="0"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBoxItem}">
                            <Border Background="{TemplateBinding Background}">
                                <ContentPresenter />
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Background" Value="#FCCC"/>
                                </Trigger>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter Property="Background" Value="#FAAA"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListBox.ItemContainerStyle>

        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                <ToggleButton VerticalAlignment="Stretch"
                            Content="{Binding Name}"
                            IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"
                            Style="{StaticResource BlankButtonStyle}"
                            />
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

これはおそらく本当にばかげた質問ですが、それは本当に私を悩ませており、私は少し立ち往生しています.

4

2 に答える 2

1

VerticalContentAlignment プロパティを使用できます。

<Style TargetType="{x:Type ListBoxItem}">
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    ...
于 2013-10-01T23:57:41.680 に答える
1

そのため、ListItem テンプレートに TextBlock を追加するだけで、これを解決できました。

空白になった ToggleButton を ListItem のフル サイズに引き伸ばしてから、TextBlock を中央に配置したり、何でも行うことができます。

これは理想的な実装ではありませんが、今のところ私が思いつくことができる最高のものです。

<ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
            <TextBlock Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Center" />
            <ToggleButton VerticalAlignment="Stretch"
                        Content=""
                        IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"
                        Style="{StaticResource BlankButtonStyle}"
                        />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
于 2013-10-02T14:05:36.940 に答える