最小宽度无效
本文关键字:无效 最小宽度 | 更新日期: 2023-09-27 17:59:40
我有一个StatusBar,里面有两个TextBlock项:
<StatusBar
x:Name="MainStatusBar"
Grid.Row="1" Grid.ColumnSpan="2" Height="30"
HorizontalContentAlignment="Left" VerticalContentAlignment="Center">
<StatusBarItem HorizontalAlignment="Stretch">
<TextBlock
x:Name="StatusBarTextBlock"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right">
<TextBlock
x:Name="StatusBarTimeBlock"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
TextWrapping="NoWrap"
MinWidth="75"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
当StatusBarTextBlock
太长时,StatusBarTimeBlock
将小于75px
。
你知道为什么吗?
这是因为您的第一个StatusBarItem
占据了整个位置,而第二个StatusBarItem
不适合StatusBar
试试这个代码看看它做什么
<StatusBar
x:Name="MainStatusBar" Margin="14,462,0,0" HorizontalAlignment="Left" Width="600" VerticalAlignment="Top">
<StatusBarItem MaxWidth="550">
<TextBlock
x:Name="StatusBarTextBlock"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right" MinWidth="75">
<TextBlock
x:Name="StatusBarTimeBlock"
TextWrapping="NoWrap"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
你有600px的StatusBar
和最大550px的第一个StatusBarItem。。。所以第二个StatusBarItem
只剩下50像素,所以它不适合您的StatusBar。在您的代码中,您没有为StatusBarTextBlock
指定Width
属性,因此它占用了所有属性(如果文本足够长)。
现在让我们尝试一些不同的东西。。。
<StatusBar
x:Name="MainStatusBar" Margin="14,462,0,0" HorizontalAlignment="Left" Width="600" VerticalAlignment="Top">
<StatusBarItem HorizontalAlignment="Right" MinWidth="250">
<TextBlock
x:Name="StatusBarTimeBlock"
TextWrapping="NoWrap"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock
x:Name="StatusBarTextBlock"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
我切换了StatusBarItems
的顺序,并将TimeBlock StatusBarItem
的MinWidth设置为250px。。。它被添加到StatusBar
中,不再忽略MinWidth,因为它是第一个项目,适合600像素的StatusBar
。
因此,只有当StatusBar
中没有足够的空间时,才会忽略MinWidth
。
但如果你注意到我提供的代码,你可能会注意到一些东西。有
<StatusBarItem HorizontalAlignment="Right" ... >
这并不是说你的StatusBarItem
和StatusBarTimeBlock
将是正确的。。。因为CCD_ 19中的项目总是从左到右添加的。所以它可能会向右对齐,但只有在并没有其他项目的情况下,它才会对齐到下一个项目或StatusBar
的末尾。
编辑
我的回答是为了回答你的问题
当StatusBarTextBlock太长时,StatusBarTimeBlock将小于75px。你知道为什么吗
确实如此,但看起来并不是你想要的。
正如我所说,StatusBar
中的项目总是从左到右添加的。这是因为它的项目托管在DockPanel
中。如果你知道DockPanel
是如何工作的,你也知道,你可以将一些项目停靠在右边。
所以你可以这么做。这恰好是你想要但没有要求的。
<StatusBar x:Name="MainStatusBar" Margin="14,490,0,0" HorizontalAlignment="Left" Width="600" VerticalAlignment="Top">
<StatusBarItem DockPanel.Dock="Right" HorizontalAlignment="Right" MinWidth="75">
<TextBlock
x:Name="StatusBarTimeBlock"
TextWrapping="NoWrap"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock
x:Name="StatusBarTextBlock"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
请注意,StatusBarTimeBlock
再次是"XAML中的第一个",但它停靠在右侧。
你说得对!
<StatusBar
x:Name="MainStatusBar"
Grid.Row="1" Grid.ColumnSpan="2" Height="30"
HorizontalContentAlignment="Left" VerticalContentAlignment="Center">
<StatusBarItem HorizontalAlignment="Right"
DockPanel.Dock="Right">
<TextBlock
x:Name="StatusBarTimeBlock"
HorizontalAlignment="Left"
VerticalAlignment="Center"
TextWrapping="NoWrap"
MinWidth="75"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Left">
<TextBlock
x:Name="StatusBarTextBlock"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
如果StatusBarTimeBlock是第一个块,并且StatusBarItem有DockPanel.Dock="Right",那么我的MinWidth始终保持75 px!
谢谢!