XAML 如何确保在TreeView WPF中正确的TextBlock文本 Package

plupiseo  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(103)

我正试图使它,使我的文本在一个文本块自动 Package 取决于窗口的大小。
例如,这是我的一些XAML代码:

<TreeViewItem Header="Message ID">
                                <TextBlock Text="The message ID determines which messages should be assigned the values in this row. This should be a hex value and applies only to the
                                           fourth byte and onwards of message data." MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Window}}" TextWrapping="Wrap"/>
</TreeViewItem>

字符串
现在,这确实会根据窗口的大小来 Package 文本,但是它没有考虑到由于TreeView的性质,文本块从窗口的右侧开始的事实,这就是 Package 的外观:Wrapping
正如你所看到的,假设文本块从窗口的左侧开始(由于树视图的原因,文本块并没有从窗口的左侧开始),因此部分文本被切断了。我已经多次向bing AI询问解决方案,并做了一些谷歌搜索,并得到了关于“转换器”的模糊答案,但我无法使这些解决方案工作。
任何帮助都将不胜感激,谢谢。

jobtbby3

jobtbby31#

我找不到任何伟大的解决方案为您的情况下,但至少让我告诉你一个棘手的变通办法:
创建一个值转换器来调整TreeViewItem s中的TextBlocks

public class AdjustingValueConverter : IValueConverter
{
    public double Variable { get; set; } = 0;

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value is double doubleValue
            ? Math.Max(doubleValue + Variable, 0)
            : value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
}

字符串
作为资源:

<Window.Resources>
    <local:AdjustingValueConverter
        x:Key="WidthValueConverter"
        Variable="-50" />
    <Style
        x:Key="TreeViewTextBlock"
        TargetType="TextBlock">
        <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}, Path=ActualWidth, Converter={StaticResource WidthValueConverter}}" />
    </Style>
</Window.Resources>


现在在每个TextBlock上:

<TreeViewItem
    Header="Message Types">
    <TextBlock
        Style="{StaticResource TreeViewTextBlock}"
        Text="The message types GUI is the window where you can add or delete your filter rules for the incoming stream of messages."
        TextWrapping="Wrap" />

相关问题