![](/img/trans.png)
[英]How can I include my custom user control with its custom view model into my xaml view?
[英]How can I make WPF instantiate a custom control in my view, using another custom control base class in my XAML?
我有一個包含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和TestControl,它們繼承自PathControl
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 }"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.