WPF Adding a Custom Property to a Control

I have a WPF application in which I have a resource dictionary. In the dictionary, I have a new style for Button that looks like this:

  <Style x:Key="MenuButtonStyle" TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Grid> <Image x:Name="Imager" RenderOptions.BitmapScalingMode="HighQuality" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}" VerticalAlignment="Center" HorizontalAlignment="Center" Stretch="UniformToFill"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="Imager" Property="Width" Value="24" /> <Setter TargetName="Imager" Property="Height" Value="24" /> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter TargetName="Imager" Property="Width" Value="16" /> <Setter TargetName="Imager" Property="Height" Value="16" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> 

And use this stye in my XAML, like this:

 <Button x:Name="Home" Style="{DynamicResource MenuButtonStyle}" Width="20" Height="20" Tag="\Images\Home.png"/> <Button x:Name="Settings" Style="{DynamicResource MenuButtonStyle}" Width="20" Height="20" Tag="\Images\Settings.png"/> 

Now, what I want to do is create a new Button -style property called OverWidth and OverHeight to use it like this:

 <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="Imager" Property="Width" Value= OVERWIDTH/> <Setter TargetName="Imager" Property="Height" Value= OVERHEIGHT/> </Trigger> 

And in XAML:

 <Button x:Name="Home" Style="{DynamicResource MenuButtonStyle}" Width="20" Height="20" Tag="\Images\Home.png" OVERWIDTH = "24"/> 

I don’t even know if this is possible. I do not want to use Binding SomeIntenger from C # code. Thanks in advance.

+10
c # properties wpf xaml custom-controls
source share
2 answers

You can use the attached properties :

 public class Extensions { public static readonly DependencyProperty OverWidthProperty = DependencyProperty.RegisterAttached("OverWidth", typeof(double), typeof(Extensions), new PropertyMetadata(default(double))); public static void SetOverWidth(UIElement element, double value) { element.SetValue(OverWidthProperty, value); } public static double GetOverWidth(UIElement element) { return (double)element.GetValue(OverWidthProperty); } } 

Xaml:

 xmlns:extensions="clr-namespace:NAMESPACE FOR Extensions class" <Trigger Property="IsMouseOver" Value="true"> <Setter Property="MinWidth" Value="{Binding Path=(extensions:Extensions.OverWidth), RelativeSource={RelativeSource Self}}"/> </Trigger> <Button extensions:Extensions.OverWidth="100" Width="10"/> 
+24
source share

I used the Tag property , which works very well. I can write something on a tag

For example (AXML) for a button :

 <Button x:Name="Btn80" Click="eventoClick" Tag="80">Casillero 80</Button>} 

I can use a string field to add lists or int , date , etc. values, then to interpret and convert the string to anything.

** I used this solution because of the need to add an identifier field for the button.

0
source share

All Articles