c# - 如何将 CustomControl 属性绑定(bind)到控件本身?

标签 c# wpf xaml mvvm colors

这是我提出的 here 的后续问题-

控制类有一个依赖属性——

private static readonly DependencyProperty
    _Color = DependencyProperty.Register( "Color", typeof( Color ), typeof( ColorDefiner ), new PropertyMetadata( Colors.Black ) );

public Color Color {
    get { return ( Color )this.GetValue( ColorDefiner._Color ); }
    set { this.SetValue( ColorDefiner._Color, value ); }
}

在控件 XAML 中,如何访问该属性以便可以将其双向绑定(bind)到负责定义颜色属性的控件 slider ?

编辑

这是其中一个 slider 的代码 -
<Slider
    x:Name="sdrRed" Height="32" Minimum="0" Maximum="1" Width="294" TickPlacement="Both"
    TickFrequency="0.01" Value="{Binding Color, Mode=TwoWay, ElementName=Me}">
</Slider>
MeUserControl 的名称.我的想法是问题是因为我指向 Color.ScR等等。

我认为我需要使用 Slider Value 属性将 Color 属性绑定(bind)到 MultiBinding,而不是将 Slider 的 Value 绑定(bind)到 Color 属性。

编辑

对我来说,这就像我应该实现 MVVM 的地方 - 有人可以告诉我如何在这里做吗?

最佳答案

如果我理解得很好,您有一个内部有 slider 的 userControl。
这就是我在 Xaml 中执行以下操作的方式。

<UserControl x:Name="MultiSlider">
...
<Slider Color="{Binding Color, ElementName="MultiSlider"}.../>
...
</UserControl>

与其他属性和其他 slider 相同。

添加

在用户控件中,您需要添加 4 个依赖属性:
public Color Color
    {
        get { return (Color)GetValue(ColorProperty); }
        set { SetValue(ColorProperty, value); }
    }

    public static readonly DependencyProperty ColorProperty =
        DependencyProperty.Register("Color", typeof(Color), typeof(MySlider), new PropertyMetadata(Colors.Red));

以及其余的属性
public double RValue
    {
        get { return (double)GetValue(RValueProperty); }
        set { SetValue(RValueProperty, value); }
    }

    public static readonly DependencyProperty RValueProperty =
        DependencyProperty.Register("RValue", typeof(double), typeof(MySlider), new PropertyMetadata(0, ValueChanged));

    private static void ValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var currentColor = (d as MySlider).Color;
        var newcolor = new Color() { R = (byte)e.NewValue, B = currentColor.B, G = currentColor.G };
        (d as MySlider).Color  = newcolor;
    }

然后是绿色和蓝色,注意 NewValue 的类型转换,我不知道 slider 范围是否达到 255。

关于c# - 如何将 CustomControl 属性绑定(bind)到控件本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29681315/

相关文章:

c# - <li class=disabled 无法禁用菜单中的选项

c# - 将 Log4Net RollingFileAppender 设置为每周滚动

wpf - 有没有好的WPF枢轴控件?

c# - 使用 CommandParameter 在 TreeView 项上进行键绑定(bind)

c# - Entity Framework 代码优先 Fluent Api : Adding Indexes to columns

c# - 如何将媒体库图像从 sitecore 下载到本地文件夹

wpf - Validation.ErrorTemplate 样式问题

c# - MVVM 绑定(bind)、对象属性通知已更改

xaml - ListView 绑定(bind)仅在滚动时更新 UI

WPF智能UI反模式: How much logic processing is appropriate in XAML?