【问题标题】:Textwrapping within Textblock within Togglebutton within ListBox ItemTemplateListBox ItemTemplate 内的 Togglebutton 内的 Textblock 内的文本换行
【发布时间】:2012-02-27 17:11:10
【问题描述】:

我正在尝试为列表框项目实现 ToggleButton 控件模板。这将在用户可以单击列表框项目以显示特定功能的应用程序中使用。

列表框项模板定义如下:

    <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。我想要达到的效果是让第二个文本块(描述)环绕,受可用空间的限制。

这就是我现在得到的:

我想要的是第二行显示示例描述,以根据列表框的大小进行换行。当应用程序启动时,列表框应自动调整为第一行 + 边距。

有什么建议吗?

【问题讨论】:

    标签: c# wpf xaml layout


    【解决方案1】:

    移除水平滚动条应该有助于文本换行:

    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    

    我不太确定如何在启动时仅使用 XAML 根据第一个文本行大小自动调整 ListBox 的大小。

    【讨论】:

    • 轰隆隆!一行修复。带有文本环绕的 TextBlocks 基本上会拉伸以适应父级。第一行要求一定的大小,因此只需关闭列表框水平滚动条即可强制其调整大小并正确换行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多