1

我想制作一个用户控件,我可以将它重用于我的应用程序中的各种按钮。有没有办法通过 XAML 将参数传递给 UserControls?我的应用程序中的大多数按钮将由两个矩形(一个在另一个中)和一些用户指定的颜色组成。它也可能有图像。我希望它表现得像这样:

<Controls:MyCustomButton MyVarColor1="<hard coded color here>" MyVarIconUrl="<null if no icon or otherwise some URI>" MyVarIconX="<x coordinate of icon within button>" etc etc>

然后在按钮内部,我希望能够在 XAML 中使用这些值(将 IconUrl 分配给图标的源等,等等。

我只是在想这个错误的方式还是有办法做到这一点?我的目的是减少所有按钮的 XAML 代码。

谢谢!

4

2 回答 2

5

是的,您可以访问Controlxaml 中的任何属性,但如果您想要 DataBind、Animate 等,则您的属性UserControl必须是DependencyProperties.

例子:

public class MyCustomButton : UserControl
{
    public MyCustomButton()
    {
    }

    public Brush MyVarColor1
    {
        get { return (Brush)GetValue(MyVarColor1Property); }
        set { SetValue(MyVarColor1Property, value); }
    }

    // Using a DependencyProperty as the backing store for MyVarColor1.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MyVarColor1Property =
        DependencyProperty.Register("MyVarColor1", typeof(Brush), typeof(MyCustomButton), new UIPropertyMetadata(null));



    public double MyVarIconX
    {
        get { return (double)GetValue(MyVarIconXProperty); }
        set { SetValue(MyVarIconXProperty, value); }
    }

    // Using a DependencyProperty as the backing store for MyVarIconX.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MyVarIconXProperty =
        DependencyProperty.Register("MyVarIconX", typeof(double), typeof(MyCustomButton), new UIPropertyMetadata(0));



    public Uri MyVarIconUrl
    {
        get { return (Uri)GetValue(MyVarIconUrlProperty); }
        set { SetValue(MyVarIconUrlProperty, value); }
    }

    // Using a DependencyProperty as the backing store for MyVarIconUrl.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MyVarIconUrlProperty =
        DependencyProperty.Register("MyVarIconUrl", typeof(Uri), typeof(MyCustomButton), new UIPropertyMetadata(null));

}

xml:

<Controls:MyCustomButton MyVarColor1="AliceBlue" MyVarIconUrl="myImageUrl" MyVarIconX="60" />
于 2012-12-27T20:56:25.883 回答
0

如果您正在谈论在 XAML 中传递构造函数参数,这是不可能的。您必须在对象初始化后通过属性设置它们,或者您需要通过代码实例化它。

这里有一个类似的问题:Naming user controls without default constructors in XAML

于 2012-12-27T20:54:46.343 回答