2013-05-25 7 views
0

Я хочу использовать ToggleSwitch контроль WPF Spark projectBinding к UserControl, который содержит пользовательский элемент управления

Так что я создал UserControl, который содержит ToggleSwitch контроль и конфигурирует его (цвет, размер и т.д.).

<UserControl x:Class="WpfControls.ToggleSwitch.MyToggleSwitchControl" 
      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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:toggleSwitch="clr-namespace:WpfControls.ToggleSwitch" 
      d:DesignHeight="300" 
      d:DesignWidth="300" 
      mc:Ignorable="d"> 
    <UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/WpfControls;component/ToggleSwitch/ToggleSwitch.Generic.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </UserControl.Resources> 
    <Grid> 
     <toggleSwitch:ToggleSwitch x:Name="Toggle" 
            Width="54" 
            Height="21" 
            Margin="0" 
            Background="Black" 
            BorderThickness="2" 
            CheckedForeground="White" 
            CheckedText="Yes" 
            CheckedToolTip="" 
            CornerRadius="10" 
            FontFamily="Tahoma" 
            FontSize="10" 
            FontWeight="Normal" 
            IsCheckedLeft="False" 
            Padding="0" 
            ThumbBorderThickness="2" 
            ThumbCornerRadius="21" 
            ThumbGlowColor="Gray" 
            ThumbShineCornerRadius="20,20,0,0" 
            ThumbWidth="35" 
            UncheckedForeground="Black" 
            UncheckedText="No" 
            UncheckedToolTip="No"> 
     </toggleSwitch:ToggleSwitch> 
    </Grid> 
</UserControl> 

The ToggleSwitch является CustomControl, который переопределяет стандартный WPF ToggleButton.

Теперь я хочу использовать ToggleButton недвижимость IsChecked в моем XAML для привязки.

<toggleSwitch:MyToggleSwitchControl IsChecked="{Binding IsChecked}" /> 

Как я могу это достичь?

ответ

1

Создание в код-за DependencyProperty:

public bool IsToggleChecked 
    { 
     get { return (bool)GetValue(IsToggleCheckedProperty); } 
     set { SetValue(IsToggleCheckedProperty, value); } 
    } 
    public static readonly DependencyProperty IsToggleCheckedProperty = 
     DependencyProperty.Register("IsToggleChecked", typeof(bool), typeof(MyToggleSwitchControl), new PropertyMetadata(false)); 

и привязать его к IsChecked собственности вашего ToggleSwitch:

<toggleSwitch:ToggleSwitch IsChecked="{Binding RelativeSource={RelativeSource AncestorLevel=1,AncestorType=UserControl,Mode=FindAncestor}, Path=IsToggleChecked}" 

После этого вы сможете сделать:

<toggleSwitch:MyToggleSwitchControl IsToggleChecked="{Binding IsChecked}" /> 
+0

я получаю предупреждение, что DP скрывает унаследованный элемент IsChecked из ToggleButton –

+0

Я думаю, что мне нужно, чтобы получить доступ к Control ToggleSwitch внутри моего UserControl какой-то образом. Можете ли вы мне помочь? –

+0

Вы можете использовать «новое» ключевое слово, чтобы избежать этого предупреждения или выбрать другое имя, чем «IsChecked» для этого DependencyProperty. – Rafal

1

Вы можете использовать свойство зависимости.

В пользовательском элементе управления добавить свойство зависимостей, как это:

public static readonly DependencyProperty IsCheckedProperty = 
     DependencyProperty.Register("IsChecked", typeof(bool), 
     typeof(MyToggleSwitchControl), null); 

    // .NET Property wrapper 
    public bool IsChecked 
    { 
     get 
     { 
      return (bool)GetValue(IsCheckedProperty); 
     } 
     set { SetValue(IsCheckedProperty, value); } 
    } 
+0

Вы имеете в виду файл .xaml.cs моего usercontrol? Это, похоже, не работает, поскольку я получаю предупреждение о том, что это скрывает свойство IsChecked ToggleButton, которое я хочу установить –

+0

Да, я имел в виду файл .xaml.cs, но я думаю, ответ от Rafal теперь соответствует вашим потребностям. –

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