2012-11-17 45 views
3

如何在RibbonGroup內水平拉伸WPF Grid?儘管有HorizontalAlignment屬性,但它並沒有伸展。在RibbonGroup內水平拉伸WPF格柵

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

行定義之後。

+0

我試着添加''無濟於事。 –

+0

你能用顯示代碼嗎? –

+0

更新了問題。現在修改應該很清楚。 –

回答

3

我不確定爲什麼HorizontalAlignmentHorizontalContentAlignment屬性沒有按照他們應該執行的操作 - 可能是功能區控件模板中的一個錯誤。

無論如何,有一種解決方法:您可以將RibbonGroupGrid綁定到RibbonTab'sActualWidth屬性。您可能需要使用轉換器來微調這些數值與偏移,但總的來說,它的伎倆:

<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> 
+0

完美地完成這項工作。 –

+0

但是,有一個差異,我認爲你應該編輯。我需要'RibbonGroup'爲'90'像素寬。 –

0

我想有一個streched內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做類似的事情很容易。