3

Grid内で WPF を水平方向に伸ばすにはどうすればよいRibbonGroupですか? HorizontalAlignment物件なのに伸びない。

<Window x:Name="FrmMain" x:Class="PhotoCell.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="PhotoCell" Height="386.821" Width="757.701" WindowState="Maximized">
<Grid>
    <Image x:Name="imgMain" Margin="10,142,10,9"/>
    <Ribbon VerticalAlignment="Top">
        <RibbonTab Header="Home" Height="88" VerticalAlignment="Top">
            <RibbonGroup Header="Save/Load" Height="88" Margin="0" VerticalAlignment="Top" Width="90">
                <Grid HorizontalAlignment="Stretch">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <RibbonButton x:Name="cmdLoadImage" Background="#FFFFC500" Label="Load" Click="cmdLoadImage_Click" Margin="10,10,10,0" Grid.Row="0" HorizontalAlignment="Stretch" />
                    <RibbonButton x:Name="cmdSaveImage" Background="#FFFFC500" Label="Save" Click="cmdSaveImage_Click" Margin="10,10,10,0" Grid.Row="1" HorizontalAlignment="Stretch" />
                </Grid>
            </RibbonGroup>
        </RibbonTab>
    </Ribbon>
</Grid>
</Window>

私も追加しようとしました

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

行定義の後。

4

2 に答える 2

3

HorizontalAlignmentおよびプロパティが正常に機能しない理由がわかりませんHorizontalContentAlignment。リボンのコントロール テンプレートのバグである可能性があります。

とにかく、回避策があります。 RibbonGroupandGridRibbonTab's ActualWidthプロパティにバインドできます。これらの値をオフセットで微調整するためにコンバーターを使用する必要があるかもしれませんが、全体として、それはトリックを行います:

<Ribbon VerticalAlignment="Top">
    <RibbonTab x:Name="tab" Header="Home" Height="88" VerticalAlignment="Top">
        <RibbonGroup Width="{Binding ElementName=tab, Path=ActualWidth}" Header="Save/Load" Height="88" Margin="0" VerticalAlignment="Top">
            <Grid Width="{Binding ElementName=tab, Path=ActualWidth}" HorizontalAlignment="Stretch">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <RibbonButton x:Name="cmdLoadImage" Background="#FFFFC500" Label="Load" Click="cmdLoadImage_Click" Margin="10,10,10,0" Grid.Row="0" HorizontalAlignment="Stretch" />
                <RibbonButton x:Name="cmdSaveImage" Background="#FFFFC500" Label="Save" Click="cmdSaveImage_Click" Margin="10,10,10,0" Grid.Row="1" HorizontalAlignment="Stretch" />
            </Grid>
        </RibbonGroup>
    </RibbonTab>
</Ribbon>
于 2012-11-17T13:41:17.837 に答える
0

RibbonGroupの中にストレッチを入れたかったのRibbonです。私は別のアプローチを使用しました。何らかの計算を行う必要があったため (他のすべての RibbonGroup の幅を取得する)、コンバーターでバインディングを使用しませんでした。コンバーター内では、他のコントロールに簡単にアクセスできません。SizeChangedのイベントを利用しましたRibbon。ここで幅を設定しますRibbonGroup

    private void RibbonOnSizeChanged(object sender, SizeChangedEventArgs sizeChangedEventArgs)
    {
        ChangeWidgetsGroupWidth(sizeChangedEventArgs.NewSize.Width);
    }

    private void ChangeWidgetsGroupWidth(double newRibbonWidth)
    {
        double otherRibbonGroupWidths = 0;
        foreach (RadRibbonGroup item in HomeTab.Items)
        {
            if (item != rgWidgetsGroup)
            {
                otherRibbonGroupWidths += item.ActualWidth + 2; // Extra margin between groups
            }
        }
        double width = newRibbonWidth - otherRibbonGroupWidths - 6; // '6' to add extra margin
        rgWidgetsGroup.Width = width > 0 ? width : 0;
    }

rgWidgetsGroupRibbonGroup最大サイズが欲しかったです。Controla の内側に似たようなことをするのは簡単だと思いますRibbonGroup

于 2012-12-07T14:49:38.360 に答える