在ListBox的ItemTemplate中,Togglebutton内的Textblock文字换行

3

我正在尝试实现一个ToggleButton控件模板,用于listbox的项目。这将用于一个应用程序中,用户可以点击listbox项目以显示特定的功能。

listbox项目模板定义如下:

    <Style x:Key="ExampleListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <ToggleButton IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"
                                  HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch">
                        <StackPanel Orientation="Vertical">
                            <TextBlock x:Name="ExampleTitle" Grid.Row="0" Foreground="#333333" 
                                       FontFamily="pack://application:,,,/Resources/Fonts/#Neuropol Regular" 
                                       FontSize="16" Height="26" TextAlignment="Left" HorizontalAlignment="Left" 
                                       VerticalAlignment="Top" Text="{Binding ExampleDisplayName}"
                                       Margin="5"></TextBlock>
                            <TextBlock Grid.Row="1" Foreground="#333333" Margin="5,-5,5,3" HorizontalAlignment="Stretch" 
                                       TextAlignment="Left" FontFamily="Verdana" VerticalAlignment="Top" 
                                       TextWrapping="Wrap" Text="{Binding ExampleDescription}"/>
                        </StackPanel>
                    </ToggleButton>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

而列表框被定义为

        <ListBox x:Name="_examplesListBox" 
                 SelectionMode="Single"
                 BorderBrush="Transparent"
                 Background="Transparent"
                 ItemsSource="{Binding AllExamples}" 
                 ItemContainerStyle="{StaticResource ExampleListBoxItemStyle}"
                 SelectedItem="{Binding SelectedExample, Mode=TwoWay}"/>

在这里,我有两个文本块,一个绑定到ExampleDisplayName,另一个绑定到ExampleDescription。 我想要实现的效果是让第二个文本块(描述)根据可用空间进行换行限制。
这是我现在得到的效果:
https://istack.dev59.com/NZih6.webp 我希望的是根据列表框的大小换行显示示例说明的第二行。当应用程序启动时,列表框应自动调整大小以适应第一行和边距。
有什么建议吗?
1个回答

7

去掉水平滚动条应该有助于文本换行:

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">

我不确定如何只使用 XAML 在启动时基于第一行文本大小自动调整 ListBox 的大小。


哇!一行代码就解决了。TextBlock 带有文本换行功能,基本上会自动拉伸以适应父容器。第一行请求特定大小,因此关闭 ListBox 水平滚动条可以强制其正确调整大小和换行。谢谢! - Dr. Andrew Burnett-Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接