我有一个带有两个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
。
你有什么想法吗?
答案 0 :(得分:0)
那是因为您的第一个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
只剩下50px所以它不适合你的StatusBar。在您的代码中,您没有为Width
指定StatusBarTextBlock
属性,因此需要全部(如果文本足够长)。
现在让我们尝试不同的东西......
<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
。
仅当MinWidth
中没有足够的空间时,才会忽略StatusBar
。
但是如果你注意我提供的代码你可能会注意到一些东西。有
<StatusBarItem HorizontalAlignment="Right" ... >
并不是说StatusBarItem
与StatusBarTimeBlock
的{{1}}将是正确的...因为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中的第一个”,但它停靠在右边。
答案 1 :(得分:0)
你是对的!
<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是第一个Block而StatusBarItem有DockPanel.Dock =“Right”,那么我的MinWidth总是保持75 px!
谢谢!