I have a user control with few elements inside, one of the element I want to set it's background to Transparent, but I dont want the user of this control to be able to change it using Styles.
: for example
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" Value="{StaticResource DisabledBackground}" />
<Setter Property="Foreground" Value="{StaticResource DisabledForeground}" />
</Trigger>
this code sets the background of the entire control (including the item I dont want to change).
Any Ideas ?
Can't you just set the background of the control explicitly to transparent? That should override any inherited styles.
Related
On the xctk:IntegerUpDown, I would like the textbox border and the ButtonSpinner to only be visible when focused or mouseover.
It is easy enough to turn the border on/off using a <Style.Triggers> section.
It is also possible to control the ShowButtonSpinner property.
However, the content of the TextBox jumps to the right if I set ShowButtonSpinner=False.
I would like to simply hide the ButtonSpinner without TextBox contents jumping around.
Like this:
How can I get access to the appropriate property?
your question helped me to find ShowButtonSpinner property which I needed to hide up and down buttons
i can suggest a workaround with setting a fixed Padding for content when buttons are hidden. Value 0,0,17,0 seems ok to me (Win7, wpf toolkit version v2.6.0.0)
<xctk:IntegerUpDown.Style>
<Style TargetType="xctk:IntegerUpDown">
<Setter Property="Padding" Value="0,0,17,0"/>
<Setter Property="ShowButtonSpinner" Value="False"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Padding" Value="0"/>
<Setter Property="ShowButtonSpinner" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</xctk:IntegerUpDown.Style>
another simple thing is to align text to left side via property
<xctk:IntegerUpDown TextAlignment="Left"/>
I am able to get a TextBlock in XAML to have an IsMouseOver trigger, but what about an IsPressed or IsFocused. I want the TextBlock background to change color when the user clicks on the TextBlock. This is TextBlock NOT a TextBox. It there a way to do it in only XAML.
I tried:
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Blue"></Setter>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="Blue"></Setter>
</Trigger>
And these don't seem to work at all. Is there another property or is it even possible to do on a TextBlock.
Thanks in advance.
Wrap it in a ToggleButton, change ToggleButton.Template to a lone ContentPresenter in a Border. Hook up Background to Border.Background via TemplateBinding.
This gives you IsChecked to trigger on and just shows text with a background color.
Hi all,
I am working on creating a button template to use in my WPF application. The format is basically color tiles (Think Windows Phone style for the most part.).
If I was wanting to change the color of the button in the event of a MouseOver, I would just make some code like this (let's say the original button color is Gray):
<Window.Resources>
<Style x:Key="ColorTileButton" TargetType="Button>
<!-- Insert various property editing here. -->
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightGray" />
</Trigger>
<Trigger Property="IsMouseOver" Value="False>
<Setter Property="Background" Value="Gray" />
</Trigger>
</ControlTemplate.Triggers>
</Style>
</Window.Resources>
But obviously this wouldn't work if the original button color was, say, Firebrick because I would end up with a bunch of standard Gray buttons. So I was wondering if there would be a way to rewrite this button template so that it would just increment the values of R, G, and B by about 10 to give the button a lighter color, then decrement is when the mouse left. Help me out?
Thanks guys.
I believe what you are describing is ColorAnimation an example, or you can look at this Forum Post. An interesting note from the Forum post.
A trigger makes a change to one or more properties when its condition is satisfied, and then resets the property values when its condition is no longer satisfied.
So what he is suggesting is:
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightGray" />
</Trigger>
</ControlTemplate.Triggers>
it would reset to FireBrick as you gave in your example
When we select ListBox item we get a Bluish background color right? How can i access that style and apply it to a different control?
i.e how can i use that selected item background color as a style elsewhere?
Thanks!
The ListBoxItem uses colors from the SystemColors class, which are pulled from Windows. Specifically, this trigger is what changes the background:
<Trigger Property="IsSelected"
Value="true">
<Setter TargetName="Bd"
Property="Background"
Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
</Trigger>
So you can either use it like above (i.e. Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}", or you could access the colors directly (i.e. "{x:Static SystemColors.HighlightBrush}").
Same goes for code-behind.
I don't think this is a direct property so I believe what you will have to do is to change the whole template.
If you speak french, look at this link. I believe it contains everything you need to know :
http://www.developpez.net/forums/d899479/dotnet/developpement-windows/windows-presentation-foundation/wpf-listviewitem-definition-style/
This is an example of a ComboBox's ControlTemplate.
CLICK HERE
I've tried to set the Background / add a trigger to change the background when the ComboBox is focused (with a tab key for example),
both without success.
I don't even understand why it isn't included by default !
(compared to the original generic template)
Do you mean change the background of the ComboBoxItem when it is focused? Its not normal to change the background of an entire ComboBox. Keep in mind that the template is different for editable ComboBoxes.
From looking at the template you referenced, the Background property is used for the ComboBox dropdown. So you're trigger needs to target that outter most Grid. Did you try adding triggers like these?
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter TargetName="[outtermostgrid]" Property="Background" Value="Red" />
</Trigger>
<Trigger Property="IsDropdownOpen" Value="True">
<Setter TargetName="[outtermostgrid]" Property="Background" Value="Red" />
</Trigger>