简体   繁体   English

WPF 在调整窗口大小时使拉伸的 TextBlock 收缩

[英]WPF make a streched TextBlock shrink when window is resized

I have a list that shows details of a files.我有一个显示文件详细信息的列表。 I designed ItemTemplate to stretch DirectoryName TextBox when window is resized.我设计了 ItemTemplate 以在调整窗口大小时拉伸 DirectoryName TextBox。

<ListView ItemsSource="{Binding LogFolderContent}" SelectedItem="{Binding SelectedLogFile}" HorizontalContentAlignment="Stretch">
    <ListView.ItemTemplate>
        <DataTemplate>
            <DockPanel>
                <TextBlock Text="{Binding LastWriteTime" DockPanel.Dock="Right"/>
                <TextBlock Text="{Binding Name}" DockPanel.Dock="Left"/>
                <TextBlock Text="{Binding DirectoryName}" DockPanel.Dock="Left" Margin="10,0,10,0"/>
            </DockPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

This works as expected.这按预期工作。 窗宽

Unfortunately when DirectoryName is very long, or window is resized the LastWriteTime disappears from view.不幸的是,当 DirectoryName 很长或调整窗口大小时,LastWriteTime 从视图中消失。

窗户窄

I would very much like to always show LastWriteTime and to do that I would like shrink the TextBlock to not display left part of the DirectoryName in a way that doesn't involve any sidebars.我非常希望始终显示 LastWriteTime 并且要做到这一点,我希望缩小 TextBlock 以不以不涉及任何侧边栏的方式显示 DirectoryName 的左侧部分。

Is it possible?是否可以?

This should do it:这应该这样做:

<ListView ItemsSource="{Binding LogFolderContent}" SelectedItem="{Binding SelectedLogFile}" HorizontalContentAlignment="Stretch">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding Name}" />
                <TextBlock Grid.Column="1" Text="{Binding DirectoryName}"/>
                <TextBlock Grid.Column="2" Text="{Binding LastWriteTime}" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

Apparently all I had to do is to disable the ScrollViewer that's part of the ListView control, and change HorizontalAlignment to Right for the DirectoryName to Disappear from the left side when window was resized.显然,我所要做的就是禁用作为ListView控件一部分的ScrollViewer ,并将DirectoryName HorizontalAlignment更改为Right以便在调整窗口大小时从左侧消失。

<ListView ItemsSource="{Binding LogFolderContent}" SelectedItem="{Binding SelectedLogFile}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListView.ItemTemplate>
        <DataTemplate>
            <DockPanel>
                <TextBlock Text="{Binding LastWriteTime}" DockPanel.Dock="Right"/>
                <TextBlock Text="{Binding Name}" DockPanel.Dock="Left"/>
                <TextBlock Text="{Binding DirectoryName}" HorizontalAlignment="Right" DockPanel.Dock="Left" Margin="10,0,10,0"/>
            </DockPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

and it looks like this now:现在看起来像这样:

正确的窗口小

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

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