我有一个带有两个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
。你有什么想法吗?
最佳答案
那是因为您的第一个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>
您的第一个StatusBarItem有600像素
StatusBar
且最大值为550像素...因此第二个StatusBarItem
仅剩50像素,因此它不适合您的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
放在右边...因为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中的第一个”,但它停靠在右边。