2013-05-25 83 views
0

我想用ToggleSwitch控制的WPF Spark project结合包含自定义控件

一个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> 

ToggleSwitchCustomControl其覆盖标准WPF ToggleButton

现在我想在我的XAML中使用ToggleButton属性IsChecked进行绑定。

<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)); 

并将其绑定到你的ToggleSwitchIsChecked属性:

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

这样做了以后,你就可以做到:

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

我得到一个警告,这DP隐藏继承成员切换按钮 –

+0

的器isChecked我想我需要访问ToggleSwitch控件我的用户里面莫名其妙。你能帮助我吗? –

+0

您可以使用'新'关键词来避免此警告,或者为此DependencyProperty选择除'IsChecked'之外的其他名称。 – 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

你的意思是我的usercontrol的.xaml.cs文件吗?这似乎并没有工作,因为我得到一个警告,这隐藏了ToggleButton的IsChecked属性,我想设置 –

+0

是的,我的意思是.xaml.cs文件,但我认为,Rafal的答案现在可以满足您的需求。 –