我有一个包含两个TextBlock项的StatusBar:
<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。
你知道为什么吗?
发布于 2013-02-17 23:27:12
这是因为你的第一个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的first StatusBarItem...所以只剩下50px的第二个StatusBarItem,所以它不适合你的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,因为它是第一个项目,适合600px的StatusBar。
因此,只有在StatusBar中没有足够的空间时,才会忽略MinWidth。
但是,如果您注意到我提供的代码,您可能会注意到一些东西。的确有
<StatusBarItem HorizontalAlignment="Right" ... >这并不是说您使用StatusBarTimeBlock的StatusBarItem将是正确的...因为StatusBar中的项无论如何都是从左到右添加的。所以它可以右对齐,但只有在没有其他项的情况下,它才会对齐到下一项或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中的第一”,但它停靠在右边。
发布于 2013-02-22 04:52:47
你是正确的!
<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总是保持75px!
谢谢!
https://stackoverflow.com/questions/14921708
复制相似问题