【问题标题】:MinWidth take no effectMinWidth 无效
【发布时间】:2013-02-17 13:43:46
【问题描述】:

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

你有什么想法吗?

【问题讨论】:

    标签: c# wpf statusbar textblock css


    【解决方案1】:

    那是因为你的第一个 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 和 Max of 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

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

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

    <StatusBarItem HorizontalAlignment="Right" ... >
    

    这并不是说你的StatusBarItemStatusBarTimeBlock 会在右边...因为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 中的第一个”,但它停靠在右侧。

    【讨论】:

    • 如果 TimeBlock 是 XAML 中的第一个项目,它也是绘制窗口中的第一个项目。
    • StatusBarItem Horizo​​ntalAlignment="Right" MinWidth="75" 中的 MinWidth 也没有改善 :-( 但我想到了一些东西,例如“overlow”-StatusBarTextBlock 的属性。(例如“hidden " 在 html 中:de.selfhtml.org/css/eigenschaften/anzeige/overflow.htm)
    • @user2063921 是的,我就是这么说的。我只是想解释它是如何工作的,以及为什么它不适合你。
    • @user2063921 请再次阅读我的答案,我进行了编辑。提供您想要的代码。
    【解决方案2】:

    你是对的!

        <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!

    谢谢!

    【讨论】:

    • 不客气 :) 请不要在不需要时添加答案。你会让未来的读者更容易:)如果我的回答对你有帮助,请使用 cmets。如果值得,请随时投票。很高兴我帮助了:)
    猜你喜欢
    • 2015-10-10
    • 2011-01-21
    • 2021-11-26
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2016-01-27
    相关资源
    最近更新 更多