gpt4 book ai didi

c# - MinWidth 无效

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:08 25 4
gpt4 key购买 nike

我有一个带有两个 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>

您有 600 像素的 StatusBar 和最大 550px 的第一个 StatusBarItem... 所以第二个 StatusBarItem 只剩下 50px 所以它不适合您的 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" ... >

这并不是说带有 StatusBarTimeBlockStatusBarItem 会在右边...因为 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 中位于首位”,但它停靠在右侧。

关于c# - MinWidth 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14921708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com