1

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

你有什么想法为什么?

4

2 回答 2

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>

你有 600pxStatusBar和 Max of 550px 第一个 StatusBarItem... 所以第二个只剩下 50pxStatusBarItem所以它不适合你的 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>

我切换了 order ofStatusBarItems并将 MinWidth of 设置TimeBlock StatusBarItem为 250px ......好吧,它被添加到了StatusBar并且它不再忽略 MinWidth 因为它是第一项并且它适合 600px StatusBar

所以MinWidth只有在没有足够的空间时才被忽略StatusBar

但是,如果您注意我提供的代码,您可能会注意到一些东西。有

<StatusBarItem HorizontalAlignment="Right" ... >

这并不是说你的StatusBarItemwithStatusBarTimeBlock会在右边......因为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-17T15:27:11.693 回答
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 是第一个块并且 StatusBarItem 具有 DockPanel.Dock="Right",那么我的 MinWidth 始终保持 75 px!

谢谢!

于 2013-02-21T20:52:47.210 回答