简体   繁体   English

WPF 文本框未在 DataTemplate 中修剪

[英]WPF TextBox not trimming in DataTemplate

I have an odd problem with TextBox with TextTrimming set to CharacterElipsis used in a DataTemplate in WPF application.我在 WPF 应用程序中的 DataTemplate 中使用 TextTrimming 设置为 CharacterElipsis 的 TextBox 有一个奇怪的问题。 At the start of application everything works fine.在应用程序开始时,一切正常。 But when I am resizing the window - reducing the width, the trimming is not working.但是当我调整 window 的大小时 - 减小宽度,修剪不起作用。

In an example below:在下面的示例中:

<Grid>
        <DockPanel>
            <DockPanel.Resources>
                <DataTemplate x:Key="lowerLevel" >
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="34*" />
                            <ColumnDefinition Width="26*" />
                            <ColumnDefinition Width="26*" />
                            <ColumnDefinition Width="14*" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="textboxvalue1" Grid.Column="0" FontWeight="Bold" VerticalAlignment="Center" Margin="15,10,0,10" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" />
                        <TextBlock Text="textboxvalue2" Grid.Column="1" FontWeight="Bold" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap"   />
                        <TextBlock Text="textboxvalue3" Grid.Column="2" FontWeight="Bold" VerticalAlignment="Center"  Margin="0,10,0,10" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap"  />
                        <CheckBox IsChecked="True" Content="ApprovedText"  FontWeight="Bold" Grid.Column="3"  VerticalAlignment="Center"  Margin="0,10,15,10" />
                    </Grid>
                </DataTemplate>
            </DockPanel.Resources>
            <ListView x:Name="listViewControl" ItemTemplate="{StaticResource lowerLevel}" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch"  HorizontalContentAlignment="Stretch" />
            
        </DockPanel>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="34*" />
                <ColumnDefinition Width="26*" />
                <ColumnDefinition Width="26*" />
                <ColumnDefinition Width="14*" />
            </Grid.ColumnDefinitions>
            <TextBlock Text="textboxvalue1" Grid.Column="0" FontWeight="Bold" VerticalAlignment="Center" Margin="15,10,0,10" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" />
            <TextBlock Text="textboxvalue2" Grid.Column="1" FontWeight="Bold" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap"   />
            <TextBlock Text="textboxvalue3" Grid.Column="2" FontWeight="Bold" VerticalAlignment="Center"  Margin="0,10,0,10" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap"  />
            <CheckBox IsChecked="True" Content="ApprovedText"  FontWeight="Bold" Grid.Column="3"  VerticalAlignment="Center"  Margin="0,10,15,10" />
        </Grid>
    </Grid>

I am having two identical Grids, but first one is placed in a DataTemplate and the second is just a separate control.我有两个相同的网格,但第一个放在 DataTemplate 中,第二个只是一个单独的控件。 TextBoxes in bottom grid are trimming correctly, when resizing window, however the TextBoxes from DataTemplate do not fit the width of parent columns while window resizing.在调整 window 的大小时,底部网格中的文本框正在正确修剪,但是在 window 调整大小时,来自 DataTemplate 的文本框不适合父列的宽度。

The code behind is:后面的代码是:

public partial class MainWindow : Window
    {
        private ListCollectionView comparedFamiliesView;
        public ListCollectionView ComparedFamiliesView
        {
            get
            {
                if (comparedFamiliesView == null)
                {
                    comparedFamiliesView = new ListCollectionView(new List<Object>() { new Object(), new Object(), new Object() });
                }
                return comparedFamiliesView;
            }
        }
        public MainWindow()
        {
            InitializeComponent();
            listViewControl.ItemsSource = ComparedFamiliesView;
        }
    }

It basically adds three objects to have something to view on ListView.它基本上添加了三个对象以在 ListView 上查看内容。

I was trying different combinations of VerticalAlignment, VerticalContentAlignment - didn't work.我尝试了 VerticalAlignment、VerticalContentAlignment 的不同组合 - 没有用。 What I have tried was to place each TextBox in separate Grid in order to bind its Width to TextBox Width or MaxWidth, like:我尝试将每个 TextBox 放在单独的 Grid 中,以便将其 Width 绑定到 TextBox Width 或 MaxWidth,例如:

<Grid Grid.Column="0" x:Name="grid1">
    <TextBlock Text="textboxvalue1" FontWeight="Bold" VerticalAlignment="Center" Margin="15,10,0,10" TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" MaxWidth="{Binding ActualWidth, ElementName=grid1}" />
</Grid>

Didn't work either.也没有用。

How can I force TextBoxes in DataTemplate to behave the same way as those in separate Grid?如何强制 DataTemplate 中的 TextBoxes 与单独 Grid 中的 TextBoxes 行为相同? Or what am I doing wrong with TextTrimming when using in DataTemplate.或者在 DataTemplate 中使用 TextTrimming 时我做错了什么。

Thank you for your help!!!谢谢您的帮助!!!

Regards,问候,

Ariel爱丽儿

Try to set the ScrollViewer.HorizontalScrollBarVisibility attached property of the ListView to Disabled :尝试将ListViewScrollViewer.HorizontalScrollBarVisibility附加属性设置为Disabled

<ListView x:Name="listViewControl" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM