【问题标题】:UWP Scale textblock inside treeview - text wrappingUWP 缩放树视图内的文本块 - 文本换行
【发布时间】:2020-01-18 17:06:43
【问题描述】:

可以请任何人帮助, 我正在开发一个 UWP 应用程序,我希望 TextBlock 根据窗口宽度将文本包装在其中。该文本块位于 TreeView 内的 Grid 内。

现在,当我调整应用程序窗口的大小时,它什么也不做。

原文:

调整大小:

我希望它看起来像这样并且没有固定宽度,而是随着窗口动态变化:

这是我的 XAML 代码:

    <TreeView Name="ItemsTreeView" SelectionMode="Multiple" ItemsSource="{x:Bind DataSource}" CanReorderItems="False" CanDrag="False" CanDragItems="False" AllowDrop="False" Margin="0,40,0,0">
        <TreeView.ItemTemplate>
            <DataTemplate x:DataType="local:Item">
                <TreeViewItem ItemsSource="{x:Bind Children}" Background="{ThemeResource SystemAltMediumLowColor}" HorizontalAlignment="Stretch">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <Image Source="{Binding Image}" Grid.Column="0" Margin="0 5 10 5"  Width="50" Height="40"></Image>
                        <TextBlock Text="{Binding Name}" Grid.Column="1" VerticalAlignment="Center" Width="500" TextWrapping="Wrap"/>
                    </Grid>
                </TreeViewItem>
            </DataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

【问题讨论】:

    标签: uwp treeview win-universal-app textblock


    【解决方案1】:

    如果要包装TextBlock并随window动态变化,则需要修改TreeViewItem的Style。在 TreeViewItem 的 Style 中,它使用 StackPanel 作为父面板,其宽度基于子控件。所以我们需要将 StackPanel 改为 Grid,并在 Grid 中添加一个三列布局(Grid 的名称是“MultiSelectGrid”),如下所示。对于原始的完整样式,您可以从 generic.xaml 中复制它。

    <Page.Resources>
            <Style TargetType="TreeViewItem" BasedOn="{StaticResource ListViewItemRevealStyle}" x:Key="MyTreeViewItemStyle">
                <Setter Property="Padding" Value="0" />
                ......
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="TreeViewItem">
                            <Grid x:Name="ContentPresenterGrid" Margin="0,0,0,0" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="{TemplateBinding CornerRadius}">
                                <VisualStateManager.VisualStateGroups>
                                    ......
                                </VisualStateManager.VisualStateGroups>
    
                                <Grid x:Name="MultiSelectGrid">
                                    <Grid  VerticalAlignment="Stretch" ......>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="Auto"></ColumnDefinition>
                                            <ColumnDefinition Width="Auto"></ColumnDefinition>
                                            <ColumnDefinition Width="*"></ColumnDefinition>
                                        </Grid.ColumnDefinitions>
                                        <Grid>
                                            <Grid.Resources>
                                                ......
                                            </Grid.Resources>
                                            ......
                                        </Grid>
    
                                        <Grid x:Name="ExpandCollapseChevron" Grid.Column="1"
                                          Padding="12,0,12,0"
                                          Width="Auto"
                                          Opacity="{TemplateBinding GlyphOpacity}"
                                          Background="Transparent">
                                            ......
                                        </Grid >
    
                                        <ContentPresenter Grid.Column="2"  x:Name="ContentPresenter"
                                    ContentTransitions="{TemplateBinding ContentTransitions}"
                                    ContentTemplate="{TemplateBinding ContentTemplate}"
                                    Content="{TemplateBinding Content}"
                                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                    Margin="{TemplateBinding Padding}" />
                                    </Grid>
    
                                </Grid>
    
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    </Page.Resources>
    

    用法:

    .xaml:

    ......
    <DataTemplate x:DataType="local:ItemTemplate">
        <TreeViewItem Style="{StaticResource MyTreeViewItemStyle}" ItemsSource="{x:Bind Children}" Margin="0"  Background="{ThemeResource SystemAltMediumLowColor}" HorizontalAlignment="Stretch">
        ......
        </TreeViewItem>
    </DataTemplate>
    ......
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 2020-01-19
      • 2011-03-31
      • 2019-06-02
      相关资源
      最近更新 更多