如何在資源檔案中定義的 ContentTemplate 上設定事件處理程式?
視窗xml
<!-- this doesnt get triggered -->
<Style x:Key="TabControlEventSetter" TargetType="{x:Type TabControl}">
<EventSetter Event="SelectionChanged"
Handler="TabControl_SelectionChanged"/>
</Style>
<!-- headered content control containing tab control -->
<HeaderedContentControl
x:Name="WorkspaceTabControl"
Header="Workspaces"
Style="{StaticResource MainHCCStyle}"
Content="{Binding Path=Workspaces}"
ContentTemplate="{StaticResource WorkspacesTemplate}"
/>
資源xml
<!-- configure content area -->
<Style x:Key="MainHCCStyle" TargetType="{x:Type HeaderedContentControl}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{TemplateBinding Content}" />
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type HeaderedContentControl}">
<DockPanel>
<ContentPresenter
DockPanel.Dock="Top"
ContentSource="Header"
ContentTemplate="{TemplateBinding HeaderTemplate}"
/>
<ContentPresenter
ContentSource="Content"
ContentTemplate="{TemplateBinding ContentTemplate}"
/>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Render a Tab Control -->
<DataTemplate x:Key="TabItemTemplate">
<DockPanel >
<ContentPresenter
Content="{Binding Path=DisplayName}"
VerticalAlignment="Center"
/>
</DockPanel>
</DataTemplate>
<!-- Render Workspace -->
<DataTemplate x:Key="WorkspacesTemplate">
<TabControl
IsSynchronizedWithCurrentItem="True"
ItemTemplate="{StaticResource TabItemTemplate}"
ItemsSource="{Binding}"
>
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<ContentPresenter
x:Name="ContentSite"
ContentSource="Header"
/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
</TabControl>
</DataTemplate>
視窗 xaml cs
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (sender is TabItem tab)
{
// handle tab change event
}
}
嘗試按照此處的建議定義樣式... 標準 WPF 選項卡控制元件中是否存在 Selected Tab Changed Event 似乎不起作用。
那么,xaml 中有沒有辦法將事件處理程式“附加”到在單獨的資源 xaml 中定義的“contentTemplate”?
uj5u.com熱心網友回復:
如果您將 定義Style為不帶 的隱式x:Key,它將應用于TabControl范圍內沒有任何特定Style應用的所有控制元件:
<HeaderedContentControl
x:Name="WorkspaceTabControl"
Header="Workspaces"
Style="{StaticResource MainHCCStyle}"
Content="{Binding Path=Workspaces}"
ContentTemplate="{StaticResource WorkspacesTemplate}">
<HeaderedContentControl.Resources>
<Style TargetType="{x:Type TabControl}">
<EventSetter Event="SelectionChanged"
Handler="TabControl_SelectionChanged"/>
</Style>
</HeaderedContentControl.Resources>
</HeaderedContentControl>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/448329.html
