MinWidth不起作用

时间:2013-02-17 13:43:47

标签: c# wpf statusbar textblock css

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

你有什么想法吗?

2 个答案:

答案 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" ... >

并不是说StatusBarItemStatusBarTimeBlock的{​​{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!

谢谢!