[英]WPF StackPanel with one Textbox trimming
我有一个顶部带有文本栏的网格。 此文本栏应显示错误文本及其后面的“关闭”链接。 一旦有足够的空间,“关闭”文本将立即跟随错误文本(上图)。 如果网格的宽度减小,则应修剪错误文本,以便“关闭”文本仍然可见(下图)。
我尝试了各种各样的东西:StackPanels、Grids、DockPanels、Width、MaxWidth,......而且很容易在网格的右边缘有“关闭”文本,但我没有成功满足这个要求。
这是我尝试过的一个例子:
<DockPanel
<TextBlock
DockPanel.Dock="Left"
FontWeight="Bold"
Text="{Binding ErrorText}"
TextTrimming="CharacterEllipsis">
</TextBlock>
<TextBlock>
<Hyperlink Command="{Binding CloseCmd}">Close</Hyperlink>
</TextBlock>
</DockPanel>
最后一个元素应该填充剩余的空间,但上面的文本框没有为“关闭”元素留下任何空间。
这应该给你你所追求的:
<Grid HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock
FontWeight="Bold"
Text="This is some text that shall be trimmed if there is not enough room"
TextTrimming="CharacterEllipsis" />
<TextBlock Grid.Column="1">
<Hyperlink>Close</Hyperlink>
</TextBlock>
</Grid>
一位同事给了我一个很好的解决方案:
<WrapPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" TextTrimming="CharacterEllipsis" Margin="5" Text="{Binding ErrorText}" />
<TextBlock Grid.Column="1" Margin="5" Text="Close" Foreground="Blue" />
</Grid>
诀窍似乎是 WrapPanel,尽管这里没有任何东西被包裹。 我不知道为什么会这样,但确实如此。
尝试使用方向设置为垂直的 WrapPanel:
<Grid>
<WrapPanel Orientation="Vertical">
<TextBlock TextTrimming="CharacterEllipsis">Some sample text</TextBlock>
<Button>Close</Button>
</WrapPanel>
</Grid>
如果我正确理解所有要求,您应该首先使用 dock=right 关闭,如下所示:
<DockPanel>
<TextBlock DockPanel.Dock="Right">
<Hyperlink Command="{Binding CloseCmd}">Close</Hyperlink>
</TextBlock>
<TextBlock
FontWeight="Bold"
Text="{Binding ErrorText}"
TextTrimming="CharacterEllipsis">
</TextBlock>
</DockPanel>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.