2013-07-04 2 views
4

В приложении Wpf у меня есть главное окно. Я добавил элемент управления пользователя к тому же проекту. В файле .xaml.cs пользовательского элемента управления добавлено свойство Dependency («Значение» свойства свойства).Условное свойство зависимостей в одном контроле xaml

Я хотел бы получить доступ к определенному свойству зависимостей в usercontrol.xaml. Я знаю, что могу сделать то же самое, создавая экземпляр управления либо в window.xaml, либо в другом пользовательском элементе управления.

Но возможно ли получить доступ к свойству зависимостей, определенному в .xaml.cs в .xaml?

Вопрос обновляется на основе Vivs ответа

Ok. Я неправильно упомянул о своем вопросе. Тем не менее, даже я не знал о доступе. Но мой фактический вопрос заключается в том, что можно установить свойство зависимостей из .xaml. некоторые вещи, как из примера, приведенного выше,

<Grid CustomBackground ="{Binding Path= BackgroundColor}" /> 

Или

<Grid CustomBackground ="Blue" /> 

Можно ли установить пользовательские свойства зависимостей, как это в том же .xaml?

ответ

9

Да, это возможно.

что-то вроде:

.xaml

<UserControl x:Class="MvvmLight26.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:MvvmLight26" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      mc:Ignorable="d"> 
    <Grid Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:UserControl1}}, Path=CustomBackground}" /> 
</UserControl> 

и .xaml.cs:

public partial class UserControl1 : UserControl { 
    public static readonly DependencyProperty CustomBackgroundProperty = 
    DependencyProperty.Register(
     "CustomBackground", 
     typeof(Brush), 
     typeof(UserControl1), 
     new FrameworkPropertyMetadata(Brushes.Tomato)); 

    public UserControl1() { 
    InitializeComponent(); 
    } 

    public Brush CustomBackground { 
    get { 
     return (Brush)GetValue(CustomBackgroundProperty); 
    } 
    set { 
     SetValue(CustomBackgroundProperty, value); 
    } 
    } 
} 

Alternate:

Если вы говорите, есть DataContext о UserControl как себя, как:

public UserControl1() { 
    InitializeComponent(); 
    DataContext = this; 
} 

то в вашем XAML вы можете просто пойти с:

<Grid Background="{Binding Path=DataContext.CustomBackground}" /> 

Update:

Для нового вопроса ,

Не совсем напрямую.

  • Вы можете «установить» значение, если пользовательский DP зарегистрирован в качестве вложенного свойства (Вы помните вложенное свойство не то же самое, как нормальный DP в его поведение и масштаб.)
  • Если вы хотите чтобы сохранить его как обычный DP, тогда вы можете сохранить UserControl1 из исходного ответа так же, как и он (просто часть DP. Вам нужно удалить часть xaml и сделать его нелевым классом в коде) а затем вывести его на новый UserControl.

что-то вроде:

<local:UserControl1 x:Class="MvvmLight26.UserControl2" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:local="clr-namespace:MvvmLight26" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        CustomBackground="Blue" 
        mc:Ignorable="d"> 
    <Grid /> 
</local:UserControl1> 

Вы можете OFC назвать UserControl1 как что-то вроде «BaseUserControl» или так, чтобы сделать это очевидным, что он не предназначен для непосредственного использования.

  • Вы можете установить значение из UserControl.Style в том же XAML.

XAML:

<UserControl x:Class="MvvmLight26.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:MvvmLight26" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      mc:Ignorable="d"> 
    <UserControl.Style> 
    <Style> 
     <Setter Property="local:UserControl1.CustomBackground" 
       Value="Blue" /> 
    </Style> 
    </UserControl.Style> 
    <Grid Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:UserControl1}}, Path=CustomBackground}" /> 
</UserControl> 
+0

@madhusudhan так, что ваш фактический вопрос тогда? – Viv

+0

Спасибо за ответ. Обновлен вопрос. –

+0

@madhusudhan Я обновил свой ответ. Это не так прямолинейно. Если вам нужна дополнительная информация о прикрепленных свойствах, я бы предложил проверить несколько статей на ней, чтобы ознакомиться с ее обычаями. – Viv

Смежные вопросы