我對 WinUI3 和 XAML 相當陌生,所以我現在有一個非常具體的需求,這意味著在代碼后面動態添加一組控制元件到網格,這作業得很好,系結操作都很好,除了現在我需要為串列視圖執行此操作,在該串列視圖中,需要相應地填充更多控制元件。
這在 XAML 中相當容易,我所要做的就是撰寫如下內容:
<ListView HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{x:Bind some_model.some_observableList_of_a_class, Mode=OneWay}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="32" Padding="0" Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<CheckBox IsThreeState="False" Margin="0" IsChecked="{Binding IsSelected, Mode=TwoWay}" Content="{Binding TextField, Mode=OneWay}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
在后面的代碼中執行此操作有點困難,這是我需要你幫助的地方,我卡在 DataTemplate 部分,我可以宣告它的新實體就好了,我可以宣告一個網格的新實體并在其中放置復選框的新實體。我的問題是我不知道如何將所述網格分配給 DataTemplate
DataTemplate dataTemplate = new DataTemplate();
Grid listViewItemTemplateGrid = new Grid();
CheckBox cbox = new CheckBox();
listViewItemTemplateGrid.RowDefinitions.Add(new RowDefinition());
listViewItemTemplateGrid.RowDefinitions[0].Height = new GridLength(0, GridUnitType.Auto);
listViewItemTemplateGrid.ColumnDefinitions.Add(new ColumnDefinition());
listViewItemTemplateGrid.ColumnDefinitions[0].Width = new GridLength(0, GridUnitType.Auto);
listViewItemTemplateGrid.Children.Add(cbox);
//here is where i'm stuck
dataTemplate.Children.Add(listViewItemTemplateGrid);//??How can i properly make this happen?
所以這就是我的問題,我如何使用 WinUi3/UWP 在 C# 中實作這一壯舉?
提前感謝大家的幫助!
uj5u.com熱心網友回復:
DataTemplate我認為在 UWP 和 WinUI 中以編程方式創建的唯一方法是使用XamlReader.LoadAPI:
const string Xaml = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">"
"<Grid Height=\"32\" Padding=\"0\" Margin=\"0\">"
"<Grid.ColumnDefinitions>"
"<ColumnDefinition Width=\"300\"/>"
"</Grid.ColumnDefinitions>"
"<Grid.RowDefinitions>"
"<RowDefinition Height=\"Auto\"/>"
"</Grid.RowDefinitions>"
"<CheckBox IsThreeState=\"False\" Margin=\"0\" IsChecked=\"{Binding IsSelected, Mode=TwoWay}\" Content=\"{Binding TextField, Mode=OneWay}\"/>"
"</Grid>"
"</DataTemplate>";
DataTemplate dataTemplate = XamlReader.Load(Xaml) as DataTemplate;
在 WPF 中有一個VisualTree屬性,您可以將其設定為 aFrameworkElementFactory但恐怕在 WinUI 中沒有這樣的東西可用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461945.html
