You can use System.Windows.Interactivity assembly ( msdn ) to do this.
First: create a helper class to set properties:
public class SetterAction : TriggerAction<DependencyObject> { public SetterAction() { Setters = new List<Setter>(); } public List<Setter> Setters { get; set; } protected override void Invoke(object parameter) { foreach (var item in Setters) { AssociatedObject.SetValue(item.Property, item.Value); } } }
XAML:
<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Background="Transparent" IsReadOnly="True" BorderThickness="0" TextWrapping="Wrap" Height="30" Width="200"> <i:Interaction.Triggers> <i:EventTrigger EventName="MouseDoubleClick"> <i:EventTrigger.Actions> <local:SetterAction> <local:SetterAction.Setters> <Setter Property="TextBox.IsReadOnly" Value="False" /> <Setter Property="TextBox.Background" Value="Green" /> </local:SetterAction.Setters> </local:SetterAction> </i:EventTrigger.Actions> </i:EventTrigger> <i:EventTrigger EventName="LostFocus"> <i:EventTrigger.Actions> <local:SetterAction> <local:SetterAction.Setters> <Setter Property="TextBox.IsReadOnly" Value="True" /> <Setter Property="TextBox.Background" Value="Red" /> </local:SetterAction.Setters> </local:SetterAction> </i:EventTrigger.Actions> </i:EventTrigger> </i:Interaction.Triggers> </TextBox>
Where i :
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
source share