提问人:Nuvolari 提问时间:11/13/2023 最后编辑:ClemensNuvolari 更新时间:11/13/2023 访问量:25
在 Avalonia 中将 TabItem.Content 设置为 UserControl
Setting TabItem.Content to a UserControl in Avalonia
问:
我正在尝试在按下按钮时将 TabItem 的内容设置为 UserControl 的内容,但是它会引发异常 - “引发异常:System.Private.CoreLib.dll 中的 'System.InvalidCastException'”。
奇怪的是,尽管抛出了异常,但它仍然似乎增加了 选项卡。
我的代码:
public void AddTabItem(ref TabItem tabItem, string title, UserControl view)
{
if (tabItem == null)
{
tabItem = new TabItem();
tabItem.Header = title;
tabItem.Content = view;
MainTabControl.Items.Add(tabItem); - this line giving the error
}
MainTabControl.SelectedItem = tabItem;
}
public void ClickHandler(object sender, RoutedEventArgs e)
{
var source = e.Source as Control;
switch (source.Name)
{
case "AddClientBtn":
ClientView clientView= new ClientView();
ClientViewModel clientViewModel = new ClientViewModel();
clientView.DataContext = clientViewModel;
AddTabItem(ref addClientTabItem, "Add Client", clientView);
break;
default:
break;
}
e.Handled = true;
}
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:MyProject.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="MyProject.Views.ClientView"
x:DataType="vm:ClientViewModel">
<Design.DataContext>
<vm:ClientViewModel />
</Design.DataContext>
<StackPanel>
<ListBox ItemsSource="{Binding Clients}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}" Margin="0,0,10,0"/>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<DataGrid x:Name="testGrid" Margin="20" ItemsSource="{Binding Clients}"
AutoGenerateColumns="True"
GridLinesVisibility="All"
BorderThickness="1" BorderBrush="Gray" Grid.Row="2" Grid.Column="0"
HeadersVisibility="All">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Width="*" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" Width="*" Binding="{Binding LastName}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</UserControl>
答: 暂无答案
评论