繁体   English   中英

如何在ControlTemplate内部访问控件

[英]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上的属性。

我最终只是在代码隐藏中引用了一个属性:

http://www.jayway.com/2011/05/17/bind-from-xaml-to-property-defined-in-code-behind/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM