gpt4 book ai didi

c# - 如何在我的 XAML 中使用另一个自定义控件基类,使 WPF 在我的 View 中实例化一个自定义控件?

转载 作者:太空宇宙 更新时间:2023-11-03 15:41:57 28 4
gpt4 key购买 nike

我有一个包含 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。

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

有可能吗?还有其他方法可以实现吗?

最佳答案

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

<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 " />

最后改为添加数据模板添加

ItemTemplateSelector="{StaticResource SelectionTemplateSelector }"

关于c# - 如何在我的 XAML 中使用另一个自定义控件基类,使 WPF 在我的 View 中实例化一个自定义控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29946391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com