2016-09-02 2 views
0

Мне нужна помощь с зависимыми свойствами. Привет Я хочу, чтобы получить доступ к двум свойствам, которые определены в шаблоне управления, CheckedText и UncheckedText:Доступ к зависимому свойству в пользовательском стиле

<Style x:Key="ToggleCheckBoxStyle" TargetType="{x:Type CheckBox}"> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> 
    <Setter Property="Height" Value="30" /> 
    <Setter Property="Width" Value="110" /> 
    <Setter Property="packages:Variables.X" Value="0" /> 
    <Setter Property="FontFamily" Value="Segoe UI" /> 
    <Setter Property="FontWeight" Value="Bold" /> 
    <Setter Property="FontSize" Value="13" /> 
    <Setter Property="BorderBrush" Value="#FF939393" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type CheckBox}"> 
       <Grid ClipToBounds="True"> 
        <Grid x:Name="Container"> 

         ... 

         <Border Height="{Binding Height, 
               RelativeSource={RelativeSource TemplatedParent}}" 
           HorizontalAlignment="Left" 
           Background="{TemplateBinding styles:ToggleCheckBox.CheckedBackground}"> 
          <Border.Width> 
           <MultiBinding Converter="{arithmeticConverter:ArithmeticConverter}" ConverterParameter="x-y"> 
            <Binding Path="Width" RelativeSource="{RelativeSource TemplatedParent}" /> 
            <Binding Path="(styles:ToggleCheckBox.ToggleWidth)" RelativeSource="{RelativeSource TemplatedParent}" /> 
           </MultiBinding> 
          </Border.Width> 
          <TextBlock HorizontalAlignment="Center" 
             VerticalAlignment="Center" 
             FontFamily="{TemplateBinding FontFamily}" 
             FontSize="{TemplateBinding FontSize}" 
             FontWeight="{TemplateBinding FontWeight}" 
             Foreground="{TemplateBinding styles:ToggleCheckBox.CheckedForeground}" 
             Text="{TemplateBinding styles:ToggleCheckBox.**CheckedText**}" /> 
         </Border> 
         <Border Width="{Binding Width, 
               RelativeSource={RelativeSource TemplatedParent}, 
               Converter={arithmeticConverter:ArithmeticConverter}, 
               ConverterParameter=x-20}" 
           Height="{Binding Height, 
               RelativeSource={RelativeSource TemplatedParent}}" 
           HorizontalAlignment="Left" 
           Background="{TemplateBinding styles:ToggleCheckBox.UncheckedBackground}"> 
          <Border.RenderTransform> 
           <TranslateTransform X="{Binding Width, RelativeSource={RelativeSource TemplatedParent}}" /> 
          </Border.RenderTransform> 
          <TextBlock HorizontalAlignment="Center" 
             VerticalAlignment="Center" 
             FontFamily="{TemplateBinding FontFamily}" 
             FontSize="{TemplateBinding FontSize}" 
             FontWeight="{TemplateBinding FontWeight}" 
             Foreground="{TemplateBinding styles:ToggleCheckBox.UncheckedForeground}" 
             Text="{TemplateBinding styles:ToggleCheckBox.**UncheckedText**}" /> 
         </Border> 
        </Grid> 
        <Border Background="Transparent" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          CornerRadius="1" /> 
       </Grid> 

А вот определение свойств зависимостей в ToggleCheckBox:

public class ToggleCheckBox 
{ 
    public static readonly DependencyProperty CheckedTextProperty = DependencyProperty.RegisterAttached("CheckedText", typeof(string), typeof(ToggleCheckBox), new FrameworkPropertyMetadata("ON")); 
    public static void SetCheckedText(UIElement element, string value) 
    { 
     element.SetValue(CheckedTextProperty, value); 
    } 

    public static string GetCheckedText(UIElement element) 
    { 
     return (String)element.GetValue(CheckedTextProperty); 
    } 

    public static readonly DependencyProperty UncheckedTextProperty = DependencyProperty.RegisterAttached("UncheckedText", typeof(string), typeof(ToggleCheckBox), new FrameworkPropertyMetadata("OFF")); 

    public static void SetUncheckedText(UIElement element, string value) 
    { 
     element.SetValue(UncheckedTextProperty, value); 
    } 

    public static string GetUncheckedText(UIElement element) 
    { 
     return (String)element.GetValue(UncheckedTextProperty); 
    } 
} 

И в использовании с моей точки зрения:

<CheckBox x:Name="IsDataStoreLocal" 
      HorizontalAlignment="Left" 
      Style="{StaticResource ToggleCheckBoxStyle}" 
      CheckedText="YES" 
      UnCheckedText="NO"/> 

Что бы я хотел сделать, это что-то вроде выше. Конечно, свойства не распознаются, вероятно, потому, что у меня есть только стиль, а не контроль. Как изменить значения «Проверено» и «Непроверенный текст» в новом флажке с помощью этого стиля?

Любая помощь будет оценена по достоинству. Спасибо, Will

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

+0

вы имеете в виду, что свойства не распознаются в использовании '' или в шаблоне? – ASh

+0

В использовании. Я отредактирую сообщение. Спасибо. – Will

+0

попытайтесь использовать его с объявлением типа '<стилей CheckBox: ToggleCheckBox.CheckedText =" YES "/>' подобно другим прикрепленным свойствам (например, Grid.Column'). – ASh

ответ

0

установить придает значение свойство на целевом элементе (галочка), используйте следующий синтаксис:

namespacePrefix:ownerTypeName.propertyName 

в случае Вашего пользовательского свойства:

<CheckBox styles:ToggleCheckBox.CheckedText="YES"/> 
Смежные вопросы