不显示用户控件

本文关键字:控件 用户 显示 | 更新日期: 2023-09-27 18:29:29

编辑:看来我需要更改RowDefinition的高度。感谢阿尔瓦罗。然而:当我想在 MainWindow.xaml 和 MainWindow.xaml.cs 中更改它们时,如何在用户控件中引用不同的元素(更改其属性(?

我在同一命名空间中有两个 XAML 文件。

MainWindow.xaml

List.xaml

当我尝试将 List.xaml 用户控件添加到我的主窗口 xaml (即从另一个文件插入 xaml( 时,它没有显示。

我插入存在于 Lemosystem 命名空间和视图文件夹中的用户控件。

xmlns:lemoview="clr-namespace:Lemosystem.View"

我将用户控件添加到我的 MainWindow.xaml:

<lemoview:List/>

什么都没有出现。这是我的列表 XAML(代码是默认值(:

<UserControl x:Class="Lemosystem.View.List"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Label Content="What do you want to do today?" HorizontalAlignment="Left" Margin="10,96,-83,0" VerticalAlignment="Top" Height="44" Width="373" FontSize="24" FontWeight="Bold"/>
    </Grid>
</UserControl>

我希望我的用户控件中的标签显示在 MainWindow.xaml GUI 中,但它没有。

MainWindow.xaml

<Window x:Class="Lemosystem.View.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:lemocontroller="clr-namespace:Lemosystem.Controller"
        xmlns:lemoview="clr-namespace:Lemosystem.View"
        Title="{Binding Path=SystemName}" Height="603" Width="827"
        ResizeMode="NoResize" WindowStartupLocation="Manual"
        >
    <Grid Name="Window" Margin="0,0,2,0">
        <Grid.RowDefinitions>
            <RowDefinition Height="0*"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
...
<lemoview:List/>
...
    </Grid>
</Window>

当我想在 MainWindow.xaml 和 MainWindow.xaml.cs 中更改它们时,如何在用户控件中引用不同的元素(更改它们的属性(?

不显示用户控件

因此,我创建了一个项目:

List.Xaml

  <UserControl x:Class="WpfApplication1.List"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Label Content="{Binding TextToDisplay}"
           HorizontalAlignment="Left"
           Margin="10,96,-83,0"
           VerticalAlignment="Top"
           Height="44"
           Width="373"
           FontSize="24"
           FontWeight="Bold" />
</Grid>
</UserControl>

列表视图模型.cs:

    public class ListViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }

    private string textToDisplay;
    public string TextToDisplay
    {
        get { return textToDisplay; }
        set { textToDisplay = value; OnPropertyChanged("TextToDisplay"); }
    }
    public ListViewModel(string value)
    {
        TextToDisplay = value;
    }
}
}

MainWindow.Xaml:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    xmlns:lemoview="clr-namespace:WpfApplication1">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <Button Content="Click Me" HorizontalAlignment="Center" Click="Button_OnClick"></Button>
    <ListView Grid.Row="1" ItemsSource="{Binding MyList}"></ListView>
</Grid>
</Window>

MainWindow.xaml.cs:

      public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
        MyList=new ObservableCollection<ListViewModel>();
    }
    private ObservableCollection<ListViewModel> myList;
    public ObservableCollection<ListViewModel> MyList
    {
        get { return myList; }
        set { myList = value; }
    }
    private void Button_OnClick(object sender, RoutedEventArgs e)
    {
        MyList.Add(new ListViewModel("MyValue"));
    }
}

App.xaml:

    <Application x:Class="WpfApplication1.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:wpfApplication1="clr-namespace:WpfApplication1"
         StartupUri="MainWindow.xaml">
<Application.Resources>
    <DataTemplate DataType="{x:Type wpfApplication1:ListViewModel}">
        <wpfApplication1:List />
    </DataTemplate>
</Application.Resources>

在 App.xaml 中,我刚刚定义了 List.xaml 和 ListViewModel 之间的绑定.cs

MainWindow 的视图模型就是它本身。

每次单击按钮后,都会创建一个新的 ViewModel,并将其添加到具有定义值的列表中(您需要修改此部分以设置所需的值(。

我希望它能帮助你!它对我有用。

如果你把它放在高度="0"的行中,你喜欢如何显示一些东西?

将其更改为 :

<Window x:Class="Lemosystem.View.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:lemocontroller="clr-namespace:Lemosystem.Controller"
    xmlns:lemoview="clr-namespace:Lemosystem.View"
    Title="{Binding Path=SystemName}" Height="603" Width="827"
    ResizeMode="NoResize" WindowStartupLocation="Manual"
    >
<Grid Name="Window" Margin="0,0,2,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
        <lemoview:List/>
</Grid>