1

より大きな問題の背景情報 私が解決しようとしている問題は、ユーザーが、RibbonTextBox コントロール テンプレート内のラベルの MinWidth を設定できるようにすることです。最初のプロパティがわかったら、他のプロパティでも同じようにするつもりです。これの目的は、幅を設定することで、互いに積み重ねられた RibbonTextBox を整列できるようにすることです。コントロールテンプレートの値をハードコーディングすることで、これまでのところ問題を解決しています。このコントロールを再利用可能にしたいので、何らかのバインディングを設定できるようにする必要があります。

解決が必要な問題 次の xaml があります (読みやすくするために多くの xaml が削除されています)。この xaml の中央にラベルが表示されます。そのラベルには、MinWidth私の質問の焦点であるプロパティがあります。

<DataTemplate x:Uid="DataTemplate_0" DataType="{x:Type element:RibbonTextBoxVM}">
    <ribbon:RibbonTextBox x:Uid="ribbon:RibbonTextBox_1" IsReadOnly="{Binding IsReadOnly}" Text="{Binding Text}" Label="{Binding Label}" >
        <ribbon:RibbonTextBox.Style>
            <Style TargetType="{x:Type ribbon:RibbonTextBox}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ribbon:RibbonTextBox}">
                            <StackPanel Orientation="Horizontal">
                                <Label Margin='2,0,0,0' Padding='0,0,0,5' BorderThickness='0,0,0,0' HorizontalAlignment='Stretch' VerticalAlignment='Bottom' 
                                       HorizontalContentAlignment='Left' VerticalContentAlignment='Top' Background='#00FFFFFF' FlowDirection='LeftToRight' 
                                       Visibility='Visible' MinWidth="80">
                                    <!--other stuff-->
                                </Label>
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ribbon:RibbonTextBox.Style>
    </ribbon:RibbonTextBox>
</DataTemplate>

以下は、上記の xaml をサポートするビューモデルです。

public class RibbonTextBoxVM : ViewModel
{
    public string Label
    {
        get { return GetValue(Properties.Label); }
        set { SetValue(Properties.Label, value); }
    }

    public string Text
    {
        get { return GetValue(Properties.Text); }
        set { SetValue(Properties.Text, value); }
    }

    public bool IsReadOnly
    {
        get { return GetValue(Properties.IsReadOnly); }
        set { SetValue(Properties.IsReadOnly, value); }
    }

    public RibbonTextBoxVM(string text, string label, bool isReadOnly)
    {
        Text = text;
        Label = label;
        IsReadOnly = isReadOnly;
    }
}

私がやりたいのは、LabelMinWidth プロパティを用意することです。

public double LabelMinWidth
{
    get { return GetValue(Properties.LabelMinWidth); }
    set { SetValue(Properties.LabelMinWidth, value); }
}

ユーザーが値をコンストラクターに渡してそのプロパティを設定できるようにしたいと考えています。それは簡単な部分です。

私が理解できない部分は、新しい LabelMinWidth を xaml のコントロール テンプレート内のラベルの MinWidth プロパティにバインドする方法です。

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです. 問題に関するご質問に喜んでお答えします。

4

1 に答える 1