1

2 つの 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ます。

理由はありますか?

4

2 に答える 2

0

それは、最初のStatusBarItem場所が完全に占有され、2 番目の場所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と最大 550px の最初の StatusBarItem があります...したがって、2 番目に残っているのは 50px だけStatusBarItemなので、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>

順序を切り替えてStatusBarItemsMinWidthTimeBlock StatusBarItemを 250px に設定しました... に追加され、StatusBar最初の項目であり 600px に収まるため MinWidth を無視しなくなりましたStatusBar

SoMinWidthに十分なスペースが残っていない場合にのみ無視され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 ピクセルのままです。

ありがとうございました!

于 2013-02-21T20:52:47.210 に答える