因爲你可能想在一個風格資源的事件處理程序,我建議背後的創建代碼ResourceDictionary中。只需在Visual Studio中創建用戶控件和替換裏面的代碼 - 你將有兩個*的.xaml和* .xaml.cs文件很好地嵌套。爲了在整個應用程序申請樣式DataGrid中,包括他們在App.xaml中應用程序的資源:
<Application.Resources>
<ResourceDictionary Source="MyStyles.xaml"/>
</Application.Resources>
代碼在MyStyles.xaml文件:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Example.MyStyles"
xmlns:vmcc="clr-namespace:Example">
<Style TargetType="{x:Type DataGridCell}" x:Key="DataGrid.DataGridCellStyle">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown"></EventSetter>
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush" Value="White" />
<Setter Property="BorderThickness" Value="2" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type vmcc:LOVComboBox}" x:Key="DataGrid.LOVComboBoxStyle">
<EventSetter Event="Loaded" Handler="UIElement_GotFocus"></EventSetter>
</Style>
<Style TargetType="{x:Type TextBox}" x:Key="DataGrid.TextBoxStyle">
<EventSetter Event="Loaded" Handler="UIElement_GotFocus"></EventSetter>
</Style>
<Style TargetType="{x:Type DataGrid}">
<Style.Resources>
<Style TargetType="DataGridCell" BasedOn="{StaticResource DataGrid.DataGridCellStyle}" />
<Style TargetType="vmcc:LOVComboBox" BasedOn="{StaticResource DataGrid.LOVComboBoxStyle}" />
<Style TargetType="TextBox" BasedOn="{StaticResource DataGrid.TextBoxStyle}" />
</Style.Resources>
</Style>
</ResourceDictionary>
我們希望有TextBox,僅在DataGrid內部應用LOVComboBox樣式 - 這就是爲什麼它們的樣式包含在DataGrid樣式的Style.Resources中的原因。我試圖把那裏的風格,從你的代碼拷貝(不帶X:主要屬性),但我得到了一個錯誤: 事件「的PreviewMouseLeftButtonDown」不能在樣式一個目標標籤中指定。改用EventSetter。。這就是爲什麼我提取他們與鍵的資源和在DataGrid的風格Style.Resources使用衍生樣式(如建議here)。
代碼在MyStyles.xaml.cs文件:
public partial class MyStyles
{
private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//your code here
}
private void UIElement_GotFocus(object sender, RoutedEventArgs e)
{
//your code here
}
}
工作完美,感謝您使用代碼的完整的解釋! – Louro