2016-04-12 26 views
1

Özel ToggleButton Şablonuma Özel Mülk (bir Bağımlılık özelliği aracılığıyla) eklemek istiyorum. Şimdi, içeren etiketin (gelecekteki uygulama için bir yer tutucu olarak), "Merhaba" ve gerçek Özellik Değeri gibi birleştirilmiş değeri olması gerektiğine inanıyorum. iyi çalışıyor birleştirme (Etiket üzerinde "savaşçı" görüntüleme)WPF ŞablonBinding Concatenate Değeri

Ama bir birleşimi olarak etiket ayarlamak çalıştığınızda xaml doesnt artık derlemek olmadan

.

<Label Content="Hello {TemplateBinding local:HeroClassCheckbox.HeroClass}"/> 

Bunu nasıl başarabilirim? Kod

UGG:

Benim .xaml

<Window.Resources> 
    <ResourceDictionary> 
     <Style x:Key="HeroClassCheckbox" TargetType="ToggleButton"> 
      <Setter Property="Content" Value="Green" /> 
      <Setter Property="local:HeroClassCheckbox.HeroClass" Value="NoClass"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ToggleButton}"> 
         <Label Content="{TemplateBinding local:HeroClassCheckbox.HeroClass}"/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ResourceDictionary> 
</Window.Resources> 
<Grid> 
    <ToggleButton Width="150" Height="50" local:HeroClassCheckbox.HeroClass="Warrior" Style="{DynamicResource HeroClassCheckbox}"/> 
</Grid> 

Benim .xaml.cs

public static class HeroClassCheckbox 
{ 
    public static readonly DependencyProperty HeroClassProperty = DependencyProperty.RegisterAttached("HeroClass", 
     typeof(string), typeof(HeroClassCheckbox), new FrameworkPropertyMetadata(null)); 

    public static string GetHeroClass(UIElement element) 
    { 
     if (element == null) 
      throw new ArgumentNullException("element"); 
     return (string)element.GetValue(HeroClassProperty); 
    } 
    public static void SetHeroClass(UIElement element, string value) 
    { 
     if (element == null) 
      throw new ArgumentNullException("element"); 
     element.SetValue(HeroClassProperty, value); 
    } 
} 

cevap

1

Sen hedefe bir yaklaşım olarak bir dönüştürücü kullanın. İşte bir örnek ..

public class HelloLabelConverter : IValueConverter 
    { 
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
      { 
        char[] removeThis = "Hello ".ToCharArray(); 
        return value.ToString().TrimStart(removeThis); 
      } 

      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
      { 
        return string.Format("Hello {0}", value); 
      } 
    } 

    <Window.Resources> 
      <local:HelloLabelConverter x:Key="HelloLabelConverter" /> 
    </Window.Resources> 
    <Grid> 
     <Label Content="{Binding ElementName= lblPropertyToBind, Path=Text, Converter={StaticResource HelloLabelConverter}}"></Label> 
    </Grid> 
i arıyordu tam olarak ne gibi görünüyor ama maalesef atar
+0

: "ad 'HelloLabelConverter clr-namespace' ad alanında yok ':. WpfApplication1' \t WpfApplication1 " , açıkça mevcut olduğu için tek sayıdır. Burada neyi yanlış yapıyorum? [.xaml] (http://pastebin.com/Fm7esb4S) [.xaml.cs] (http://pastebin.com/Q8urWFQJ) –

+0

Göremediğimizde bu sorunu çözmek zor. proje dosyalarınızın yapısı. Değer dönüştürücüleri nasıl kullanacağınıza ve –

+0

'un işe yarayıp yaramadığına bakın. Bu sadece standart bir projedir (yeni proje-> wpf projesi), ama değer dönüştürücüleri için bir Eğitici arayacağım. –