1

これは簡単なことで、調べるのも簡単だと思いますが、まだ運がありません。基本的に、WPFスライダーのスタイルを設定して、使用時に2つの追加の文字列を表示できるようにします。

新しいコントロールは次のようになります。

public class SliderPicker : Slider
{
    public string LeftLabel
    {
        get { return (string)GetValue(LeftLabelProperty); }
        set { SetValue(LeftLabelProperty, value); }
    }

    public static readonly DependencyProperty LeftLabelProperty =
        DependencyProperty.Register("LeftLabel", typeof(string), typeof(SliderPicker), new UIPropertyMetadata(String.Empty));

    public string RightLabel
    {
        get { return (string)GetValue(RightLabelProperty); }
        set { SetValue(RightLabelProperty, value); }
    }

    public static readonly DependencyProperty RightLabelProperty =
        DependencyProperty.Register("RightLabel", typeof(string), typeof(SliderPicker), new UIPropertyMetadata(String.Empty));
}

このようなスタイル:

    <Style x:Key="SlickSlider" TargetType="{x:Type Slider}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Slider}">
                    ...
                            <TextBlock Text="{TemplateBinding LeftLabel}" Grid.Row="2" HorizontalAlignment="Left" />
                            <TextBlock Text="{TemplateBinding RightLabel}" Grid.Row="2" HorizontalAlignment="Right" />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

そして使用法:

<controls:SliderPicker LeftLabel="RealPreference" RightLabel="RealCoverage" Width="400" Style="{StaticResource SlickSlider}"/>

これはうまくいかないようです。では、コントロールにDPを設定して、テンプレートに表示するにはどうすればよいですか?それがTemplateBindingの目的だと思いましたか?

4

1 に答える 1

1

小さな修正だけが必要です。{x:Type Slider}に変更{x:Type controls:SliderPicker}

スタイルとテンプレートのタイプとしてカスタムコントロールを適用する必要があります。それがなければ、テンプレートバインディングではなく、検索して検索しようLeftLabelPropertyとします。RightLabelPropertySliderSliderPicker

スタイルをに変更します

<Style x:Key="SlickSlider" TargetType="{x:Type controls:SliderPicker}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type controls:SliderPicker}">
                    ...
                            <TextBlock Text="{TemplateBinding LeftLabel}" Grid.Row="2" HorizontalAlignment="Left" />
                            <TextBlock Text="{TemplateBinding RightLabel}" Grid.Row="2" HorizontalAlignment="Right" />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

あなたが投稿したクラスでこれを試しましたが、うまくいきます:)

于 2013-03-22T18:30:24.090 に答える