Декларативно установить свойство MyUserControl в MyUserControl.xaml - PullRequest
3 голосов
/ 18 марта 2009

Предполагая, что у нас есть такой контроль:

public partial class MyUserControl : UserControl
{
    public MyUserControl() {
        InitializeComponent();
    }

    public string Foo { get; set; }
}

Как можно декларативно установить значение свойства "Foo" в MyUserControl.xaml?

<UserControl x:Class="Test.MyUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!-- Looking for some thing like this -->
    <Foo>Hola</Foo>

</UserControl>

Чтобы быть более понятным: как я могу установить в XAML значение для свойства, определенного в code-behind.

Ответы [ 5 ]

7 голосов
/ 08 мая 2009

В прошлом я обнаружил, что вы можете использовать стиль для установки свойств в UserControl из xaml без наследования. Попробуйте что-то вроде этого:

<UserControl x:Class="Test.MyUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:Test.MyUserControl" >

    <UserControl.Style>
        <Style>
            <Setter Property="c:MyUserControl.Foo" Value="Hola" />
        </Style>
    </UserControl.Style>

</UserControl>
1 голос
/ 20 марта 2009

Этого можно достичь только в xaml с помощью наследования:

Вы предоставляете реализацию для своего контроля. Таким образом, единственный способ получить значение в xaml для вашего контроля - это наследование.

Ваш второй UserControl будет выглядеть так:

<Test:MyUserControl x:Class="Test.MyUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:Test="clr-namespace:Test"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Test:MyUserControl.Foo>Hola</Test:MyUserControl.Foo>

</Test:MyUserControl>

или

<Test:MyUserControl x:Class="Test.MyUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:Test="clr-namespace:Test"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Foo="Hola">

</Test:MyUserControl>
1 голос
/ 18 марта 2009

В вашем контроле установите его в конструкторе

public MyUserControl{ this.Foo = "Hola";}

Если вы используете элемент управления где-то еще:

<Window xmlns:mycontrol="Test"     ....

Intellisense поможет вам с правильным синтаксисом xmlns

<mycontrol:MyUserControl       Foo="Hola"/>

Я не уверен, но Foo, возможно, должен быть DependencyProperty.

0 голосов
/ 16 сентября 2009

А как насчет не строкового свойства? например MyCustomObject =

0 голосов
/ 18 марта 2009

Похоже, что вы действительно хотите, это значение по умолчанию для свойств на UserControl. К сожалению, вы не можете установить его в Style, если это не DependencyProperty. Это также не может быть целью Binding.

Если бы Foo было DependencyProperty, вы могли бы установить его в PropertyMetadata при объявлении вашего DependencyProperty:

public static readonly DependencyProperty FooProperty = DependencyProperty.Register("Foo", typeof(String), typeof(MyUserControl), new PropertyMetadata("Hola"));

В противном случае вам, вероятно, лучше установить значение по умолчанию в коде позади.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...