RibbonGroupsの名前を設定する
他の解決策があるかもしれませんが、私の場合は、OnAttachedメソッドでRibbonGroupの名前を設定する動作を実装することです。
public class RibbonGroupNameBehavior : Behavior<RibbonGroup>
{
protected override void OnAttached()
{
base.OnAttached();
GroupeCommandesViewModel groupeCommandesViewModel = this.AssociatedObject.DataContext as GroupeCommandesViewModel;
if (groupeCommandesViewModel != null)
{
this.AssociatedObject.Name = groupeCommandesViewModel.Nom;
}
}
}
割り当ての周りにtry-catchブロックを追加することをお勧めします...
ビヘイビアを使用する
DataTemplatesを使用しているので、スタイルを使用して動作をRibbonGroupsに割り当てる必要があると思います。私はこのソリューションをうまく使っています。ご覧のとおり、私の動作のコードは必要な依存関係プロパティを提供していません。追加する必要があります。
これが私の短縮リボンのスタイルです:
<r:Ribbon.Style>
<Style TargetType="{x:Type r:Ribbon}">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type r:RibbonTab}">
<Setter Property="ItemsSource" Value="{Binding ListeCommandes, Converter={StaticResource CommandesToGroupesConverter}}" />
<Setter Property="GroupSizeReductionOrder" Value="{Binding ListeCommandesOrdreRedimensionnement}" />
<Setter Property="ItemContainerStyleSelector">
<Setter.Value>
<ribbonVM:RibbonGroupStyleSelector>
<ribbonVM:RibbonGroupStyleSelector.GenericStyle>
<Style TargetType="{x:Type r:RibbonGroup}" BasedOn="{StaticResource RibbonGroupStyle}" />
</ribbonVM:RibbonGroupStyleSelector.GenericStyle>
</ribbonVM:RibbonGroupStyleSelector>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
</r:Ribbon.Style>
そして私のRibbonGroupのスタイル:
<Style x:Key="RibbonGroupStyle" TargetType="{x:Type r:RibbonGroup}" BasedOn="{StaticResource RibbonControlStyle}">
<Setter Property="Header" Value="{Binding Libellé}" />
<Setter Property="ItemsSource" Value="{Binding Commandes}" />
<Setter Property="CanAddToQuickAccessToolBarDirectly" Value="False" />
<Setter Property="ihm_behaviors:RibbonGroupNameBehavior.IsEnabled" Value="True" />
</Style>
GroupSizeReductionOrderプロパティのデータバインディング
GroupSizeReductionOrderプロパティの定義を見ると、TypeConverterStringCollectionConverterを持つStringCollectionであることがわかります。私が見たところ、このコンバーターは文字列からStringCollectionにのみ変換します。したがって、プロパティは文字列またはStringCollectionのいずれかである必要があります。