是否可以在WPF绑定中使用Type Cast?

时间:2014-04-07 20:59:34

标签: wpf

我有一个Catel用户控件,它将作为我的标签项。

我有一个带有以下样式的标签控件:

    <Grid.Resources>
        <Style x:Key="ShellTabItemStyle" TargetType="TabItem">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <!--Display the child view name on the tab header-->
                    <DataTemplate>
                        <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}, Mode=FindAncestor}, Path=Header}" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Resources>


    <TabControl Grid.Row="0" Margin="10,10,10,0" ItemContainerStyle="{StaticResource ShellTabItemStyle}">
        <views:OpsReport01ParameterView />
        <views:NonCompliantTradesParameterView />
        <views:AuditReportParameterView />
    </TabControl>

我的UserControl实现了一个指定Header属性的接口。有没有办法施放&#39; UserControl&#39;到接口IMyInterface?我曾尝试使用IMyInterface作为AncestorType,但这似乎不起作用。

1 个答案:

答案 0 :(得分:0)

尝试扩展UserControl类并将Header DependencyProperty添加到新类中:

public partial class YourUserControl : UserControl
{
    // Declare Header DependencyProperty here
}

然后在您的其他自定义UserControl中,扩展此YourUserControl&#39; base&#39; class而不是UserControl类:

public partial class AuditReportParameterView : YourUserControl
{
    ...
} 
// etc.

然后,您可以在YourUserControl中使用RelativeSource Binding作为所有派生类的类型:

<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type 
    YourPrefix:YourUserControl}}, Path=Header}" />