If i have a trigger on IsEnabled in my LabelProperties style an bind that to a DependecyProperty in my ViewModel the Trigger will not 'fire' when i set the DataContext after InitilizeComponent only if i set it before. The problem with this is that IsEnable will not work if i set the DataContext in xaml on a UserControl containing the gauge. I think that this is a faulty behavior because Minor/MajorTickStyle works if i set the DataContext after InitilizeComponent.
well this thread is useless without code so...
my usercontrol
code behind
my viewmodel
well this thread is useless without code so...
my usercontrol
<UserControl x:Class="WpfTest_Telerik.UserControl1" |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" |
Width="300" Height="300"> |
<UserControl.Resources> |
<Style x:Key="MajorTickStyle" TargetType="{x:Type telerik:TickProperties}"> |
<Setter Property="Background" Value="White" /> |
<Style.Triggers> |
<Trigger Property="IsEnabled" Value="False"> |
<Setter Property="Background" Value="Black" /> |
</Trigger> |
</Style.Triggers> |
</Style> |
<Style x:Key="LabelProperties" TargetType="{x:Type telerik:LabelProperties}"> |
<Setter Property="Foreground" Value="White" /> |
<Style.Triggers> |
<Trigger Property="IsEnabled" Value="False"> |
<Setter Property="Foreground" Value="Black" /> |
</Trigger> |
</Style.Triggers> |
</Style> |
</UserControl.Resources> |
<Grid> |
<telerik:RadGauge> |
<telerik:RadialGauge> |
<telerik:RadialScale> |
<telerik:RadialScale.MajorTick> |
<telerik:TickProperties IsEnabled="{Binding Path=IsActive}" Style="{StaticResource MajorTickStyle}"/> |
</telerik:RadialScale.MajorTick> |
<telerik:RadialScale.Label > |
<telerik:LabelProperties IsEnabled="{Binding Path=IsActive}" Style="{StaticResource LabelProperties}" /> |
</telerik:RadialScale.Label> |
</telerik:RadialScale> |
</telerik:RadialGauge> |
</telerik:RadGauge> |
</Grid> |
</UserControl> |
code behind
using System.Windows.Controls; |
namespace WpfTest_Telerik |
{ |
/// <summary> |
/// Interaction logic for UserControl1.xaml |
/// </summary> |
public partial class UserControl1 : UserControl |
{ |
public UserControl1() |
{ |
// will work |
//DataContext = new UserControl1ViewModel(); |
InitializeComponent(); |
// will not work |
DataContext = new UserControl1ViewModel(); |
} |
} |
} |
my viewmodel
using System; |
using System.Windows; |
using System.Timers; |
using System.Windows.Threading; |
namespace WpfTest_Telerik |
{ |
public class UserControl1ViewModel : DependencyObject |
{ |
private readonly Dispatcher _currentDispatcher; |
public UserControl1ViewModel() |
{ |
_currentDispatcher = Dispatcher.CurrentDispatcher; |
var timer = new Timer(2000); |
timer.Elapsed += TimerElapsed; |
timer.Start(); |
} |
void TimerElapsed(object sender, ElapsedEventArgs e) |
{ |
Action x = () => IsActive = !IsActive; |
_currentDispatcher.BeginInvoke(x); |
} |
public bool IsActive |
{ |
get { return (bool)GetValue(IsActiveProperty); } |
set { SetValue(IsActiveProperty, value); } |
} |
// Using a DependencyProperty as the backing store for IsActive. This enables animation, styling, binding, etc... |
public static readonly DependencyProperty IsActiveProperty = |
DependencyProperty.Register("IsActive", typeof(bool), typeof(UserControl1ViewModel), new UIPropertyMetadata(false)); |
} |
} |