<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="0.55*" />
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Background="Gray">
<TextBlock x:Name="EmployeeNameTextBlock"
VerticalAlignment="Center"
Margin="50,0,0,0"
FontSize="18"
RenderTransformOrigin="0.5,0.5"
Text="Content09asdfadsdsdasdfasd92168132 "
TextWrapping="NoWrap"
/>
<ToggleButton x:Name="btn"
HorizontalAlignment="Left"
Margin="0,0,0,0"
VerticalAlignment="Center"
Height="30"
Width="30" >
Button
</ToggleButton>
</StackPanel>
<Label Grid.Column="1" Background="Yellow" />
</Grid>
这是我的代码,在显示切换按钮时遇到问题,有关当前显示和期望的信息,请参见下面的屏幕截图
条件 *即使内容较小或较大,按钮也应始终位于文本块的结尾 *如果内容大于容器,则文本框大小应停在按钮宽度减小之前。这样我们就可以在显示屏上看到切换按钮。如预期的屏幕截图所示。
预期的屏幕截图小文本
请对此提供任何帮助
预先感谢
解决方案
<Grid SizeChanged="Grid_SizeChanged">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="0.55*" />
</Grid.ColumnDefinitions>
<Border Name="rightBlk" Background="Green" Grid.Column="1" />
<Grid VerticalAlignment="Center" Background="Gray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock x:Name="EmployeeNameTextBlock"
VerticalAlignment="Center"
Margin="50,0,0,0"
TextTrimming="CharacterEllipsis"
FontSize="18"
RenderTransformOrigin="0.5,0.5"
Text="Content09asasdfasdfd "
TextWrapping="NoWrap"
Padding="0,0,30,0"
/>
<ToggleButton x:Name="btn"
HorizontalAlignment="Right"
Margin="0,0,0,0"
VerticalAlignment="Center"
Height="30"
Width="30" >
Button
</ToggleButton>
</Grid>
<Label Grid.Column="1" Background="Yellow" />
</Grid>
隐藏代码
private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
EmployeeNameTextBlock.MaxWidth = ((Grid)sender).ActualWidth - 50 - rightBlk.ActualWidth;
}
感谢@lvan和@Neptune帮助我解决此问题。
答案 0 :(得分:0)
您可以用网格替换StackPanel。这样,您就可以更好地控制分发,并且可以在将其余按钮分配给TextBlock之前,让Button优先获得其宽度的优先级:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="0.55*" />
</Grid.ColumnDefinitions>
<Grid VerticalAlignment="Center" Background="Gray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock x:Name="EmployeeNameTextBlock"
VerticalAlignment="Center"
Margin="50,0,0,0"
TextTrimming="CharacterEllipsis"
FontSize="18"
RenderTransformOrigin="0.5,0.5"
Text="Content09asdfadsdsdasdfasd92168132 "
TextWrapping="NoWrap"
/>
<ToggleButton x:Name="btn" Grid.Column="1"
HorizontalAlignment="Left"
Margin="0,0,0,0"
VerticalAlignment="Center"
Height="30"
Width="30" >
Button
</ToggleButton>
</Grid>
<Label Grid.Column="1" Background="Yellow" />
</Grid>
如果您想向用户指示缺少文本,则添加了属性TextTrimming
,但是如果不需要,可以将其删除。
答案 1 :(得分:0)
您可以通过编写代码并添加内容来获得所需的内容
MaxWidth="270"
和TextTrimming="CharacterEllipsis"
到文本框
或海王星代码并进行更改
<ColumnDefinition Width="*" />
设置为“自动”,并将MaxWidth="270"
添加到文本框。
我认为如果不在文本框中设置MaxWidth,就无法做到这一点,但这意味着如果调整窗口大小,则必须重新计算。
要重新计算: 订阅主窗口大小更改事件:
SizeChanged += MainWindow_SizeChanged;
在主窗口构造函数中或在xaml中
并添加到代码隐藏中:
private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
{
EmployeeNameTextBlock.MaxWidth = StackPanelName.ActualWidth - btn.ActualWidth;
}
您可能需要使用.Width而不是实际宽度,也可以尝试使用列而不是堆栈面板,但这说明了您需要进行的重新计算。