如何使用XAML中的另一个自定义控件基类使WPF在视图中实例化一个自定义控件?

摩根

我有一个包含5列的ListView:

  <ListView x:Name="FieldList" ItemsSource="{Binding MonitorField}" SelectedItem="{Binding Field}" Margin="33,22,87,209" Grid.Column="1" Grid.RowSpan="2">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="140" Header="Field Name">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBox Width="127" Text="{Binding Id}" Height="32" FontSize="16" IsReadOnly="False" Background="Transparent" BorderThickness="0" TextWrapping="Wrap"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                    <GridViewColumn Width="140" Header="File type" >
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox Width="127" ItemsSource="{Binding ResourceTypeValues}"  SelectedItem="{Binding ResourceTypeToLoad}" Height="24" FontSize="16" Background="Transparent" BorderThickness="0" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                    <GridViewColumn Width="140" Header="Path" >
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <MyNamespace:PathControl Width="127" Text="{Binding ResourcePathToLoad, Mode=TwoWay}"  Height="32" FontSize="16" Background="Transparent" TextWrapping="Wrap">
                                    <MyNamespace:PathControl.InputBindings>
                                        <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding BrowseFileCommand}" />
                                    </MyNamespace:PathControl.InputBindings>
                                </MyNamespace:PathControl>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>                
</GridView>
            </ListView.View>

这是我从PathControl继承的自定义控件PathControl和TestControl

public class PathControl : TextBox, IPathControl
{
    static PathControl()
    {
        //DefaultStyleKeyProperty.OverrideMetadata(typeof(PathControl), new FrameworkPropertyMetadata(typeof(PathControl)));
    }
}

public class TestControl : PathControl
{
    static TestControl()
    {

    }
}

我想做的就是让WPF实例化一个自定义控件,具体取决于我在PathControl之前定义的Combobox。

例如,如果我在组合框中选择“ Txt”,我想创建一个继承自PathControl的TxtControl。

鼠标绑定将根据实例化的自定义控件调用不同的方法。

可能吗?还有另一种方法可以实现吗?

胡安·帕勃罗·加西亚·科洛

首先,将您想要的两个数据模板定义为资源:

<DataTemplate x:Key="case1">
 <c:PathControl />
</DataTemplate>

然后另一个

<DataTemplate x:Key="case2">
 <c:TestControl />
</DataTemplate>

现在创建一个DataTemplateSelector

public class SelectionTemplateSelector : DataTemplateSelector
{
public DataTemplate Case1Template { get; set; }
public DataTemplate Case2Template { get; set; }

public override DataTemplate SelectTemplate(object item, 
DependencyObject container)
{

if( //Get the binding you need)
return Case1Template ;
else
return Case2Template ;
}
}

现在添加另一个资源:

 <c:SelectionTemplateSelector 
    ImageTemplate="{StaticResource case1}" 
    StringTemplate="{StaticResource case2}" 
    x:Key="SelectionTemplateSelector " />

最后改为添加一个datatemplate add

ItemTemplateSelector="{StaticResource SelectionTemplateSelector }"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

WPF:自定义控件属性已被另一个自定义控件错误注册

是否可以在自定义View类中创建另一个控件?

我可以创建一个使用Generic.xml中的另一个自定义控件的自定义控件吗

如何正确地向另一个自定义控件添加一个自定义控件,使其以表格形式呈现?

如何使用分段控件在一个表视图中维护两个自定义单元格?

自定义控件从另一个函数选择器控件返回任务

如何在另一个自定义视图中添加自定义视图?

在同一个库中如何有许多wpf自定义控件?

Xpages-自定义控件从另一个自定义控件获取自定义属性

将属性绑定到自定义控件的另一个属性

WPF 将自定义 ContextMenu 添加到另一个视图中引用的视图

如何从Odoo的另一个视图中的另一个字段自动填充自定义视图中的字段?

WPF自定义控件:DependencyProperty从不设置(仅在多个属性中的一个)

从自定义控件的另一个属性获取在设计器中设置的属性值

ByteBuddy:如何在另一个类中使用自定义方法声明一个类

如何使用人偶要求另一个自定义类

从Java到C ++:如何在另一个自定义类中使用一个自定义类var?

在Android的自定义列表视图中从一个片段移动到另一个片段

Node.js:在另一个自定义类中引用自定义类

无法从另一个类访问我的自定义视图对象

在另一个自定义 UIView 中嵌入自定义 UITableViewCell?

当自定义绘画代码在另一个类中时,不执行自定义绘画

如何在另一个自定义模块中使用一个自定义模块中的功能

如何将自定义xtype添加到另一个视图?

是否可以在另一个应用程序中实现自定义视图?

使用另一个向量定义的自定义间隔对向量中的Bin值

依赖于另一个表单控件的Angular 2自定义验证器

如何在自定义控件中创建一个按钮以触发onClick事件,并以自定义控件所在的主要形式对其进行处理?

在Flutter中创建一个扩展另一个自定义类的类