【问题标题】:Stretch WPF grid horizontally inside RibbonGroup在 RibbonGroup 内水平拉伸 WPF 网格
【发布时间】:2012-11-05 23:21:18
【问题描述】:

如何在 RibbonGroup 内水平拉伸 WPF Grid?尽管有 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>

行定义之后。

【问题讨论】:

  • 我尝试添加&lt;ColumnDefinition Width="*" /&gt; 无济于事。
  • 你能用 显示代码吗?
  • 更新了问题。修改现在应该很清楚了。

标签: wpf xaml ribbon alignment


【解决方案1】:

我想在Ribbon 中拉伸一个RibbonGroup。我使用了不同的方法。由于我必须进行一些计算(获取所有其他 RibbonGroups 的宽度),因此我没有使用带转换器的绑定。在转换器中,我无法轻松访问其他控件。我使用了RibbonSizeChanged 事件。这里我设置了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 我想要的最大尺寸。我认为在RibbonGroup 中为Control 做类似的事情会很容易。

【讨论】:

    【解决方案2】:

    我不确定为什么 HorizontalAlignmentHorizontalContentAlignment 属性没有按应有的方式执行 - 可能是功能区控件模板中的错误。

    无论如何,有一个解决方法:您可以将RibbonGroupGrid 绑定到RibbonTab'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>
    

    【讨论】:

    • 但是,有一个差异,我认为您应该对其进行编辑。我需要RibbonGroup90 像素宽。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2018-07-13
    相关资源
    最近更新 更多