[英]How to access control inside of a ControlTemplate
如何从代码隐藏访问btnViewTable? 特别是能够打开或关闭可见性,甚至将其删除。 我看过GetTemplateChild和FindName,但是无法访问该按钮。 我可以设法获得对ControlTemplate的引用,但除此之外别无他法。
<Grid x:Name="pnlSearch" Background="White">
<TextBlock x:Name="txtSearchResults" />
<sdk:DataGrid x:Name="grdResults">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Value}"/>
<sdk:DataGridTextColumn Binding="{Binding FoundFieldName}"/>
</sdk:DataGrid.Columns>
<sdk:DataGrid.RowGroupHeaderStyles>
<Style TargetType="sdk:DataGridRowGroupHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridRowGroupHeader">
<sdk:DataGridFrozenGrid Name="Root">
<StackPanel>
<Button x:Name="btnViewTable"
var button = (Button)DataGrid.Template.FindName("btnViewTable", "DataGridControl");
button.Click += //Do something;
其中DataGrid / DataGridControl是实际的DataGridControl
从控件外部处理模板的各个部分始终不是一个好主意。
为了快速解决问题,我建议使用:
<Style TargetType="sdk:DataGridRowGroupHeader">
<Setter Property="Tag" Value="{Binding SomeVisibilityProperty}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridRowGroupHeader">
<Grid
<sdk:DataGridFrozenGrid Name="Root">
<StackPanel>
<Button x:Name="btnViewTable"
Visibility="{TemplateBinding Tag}"
其中SomeVisibilityProperty
是数据上下文中的属性。 可能需要使用RelativeSource
。
对于“ true”修复,我将定义一个附加属性。 将此属性设置为绑定到父网格上的相同属性,然后具有按钮以绑定到DataGridRowGroupHeader
上的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.