在 Avalonia 中将 TabItem.Content 设置为 UserControl

Setting TabItem.Content to a UserControl in Avalonia

提问人:Nuvolari 提问时间:11/13/2023 最后编辑:ClemensNuvolari 更新时间:11/13/2023 访问量:25

问:

我正在尝试在按下按钮时将 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>

C# XAML avaloniaui avalonia

评论


答: 暂无答案