在一个涉及用户权限显示不同的布局需求中,使用了ContentControl的ContentTemplate,发现DataTemplate中按钮的绑定事件失效,原因是ContentControl的DataContext已经和父元素的DataContext断开,需要手动绑定一下:
Xaml 写法如下:
<ContentControl ContentTemplate="{StaticResource functionViewDataTemplate}"
Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=DataContext}">
</ContentControl>
模板定义如下:
<DataTemplate x:Key="functionViewDataTemplate">
<Grid>
<Grid x:Name="layout1" Margin="5" Visibility="Collapsed">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Style="{StaticResource OpenFileStyle}" Width="100" Height="90" Content="{DynamicResource OpenFile}" Command="{Binding OpenFile}"/>
<Button Style="{StaticResource SaveFileStyle}" Grid.Column="1" Width="100" Height="90" Content="{DynamicResource SaveFile}" Command="{Binding SaveFile}"/>
<Button Style="{StaticResource QRStyle}" Grid.Row="1" Width="100" Height="90" Content="{DynamicResource ShareFile}" Command="{Binding QR}"/>
</Grid>
<Grid x:Name="layout2" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Style="{StaticResource OpenFileStyle}" Width="100" Height="90" Content="{DynamicResource OpenFile}" Command="{Binding OpenFile}"/>
<Button Style="{StaticResource SaveFileStyle}" Grid.Column="1" Width="100" Height="90" Content="{DynamicResource SaveFile}" Command="{Binding SaveFile}"/>
</Grid>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ShowAllFunction}" Value="True">
<Setter TargetName="layout2" Property="Visibility" Value="Collapsed"></Setter>
<Setter TargetName="layout1" Property="Visibility" Value="Visible"></Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>