wpf 元素未显示在屏幕上

20jt8wwn  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(124)

我的问题是WPF xaml代码不显示在屏幕上。应该做的是以下几点:

  • 从MainViewModel获取列表
  • 对于每个元素,它应该在内部创建一个文本块的边框

现在它似乎找到了列表和其中的所有元素。
下面是XAML代码:

<Window x:Class="MemoryUI.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        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:local="clr-namespace:MemoryUI"
        mc:Ignorable="d"
        Title="Memory" Height="800" Width="900" ResizeMode="NoResize" d:DataContext="{d:DesignInstance Type=local:MainViewModel}">
    <StackPanel x:Name="MainContainer" Orientation="Vertical">
        <Border BorderBrush="Black" BorderThickness="3">
            <Grid x:Name="GameGrid">
                <ItemsControl ItemsSource="{Binding Cards}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <UniformGrid Columns="6"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Border 
                                Background="{Binding Background}" 
                                 Cursor="{Binding Cursor}" 
                                 Margin="{Binding Margin}" 
                                 Height="{Binding Height}" 
                                 Width="{Binding Width}" 
                                 MouseLeftButtonDown="CardClicked">
                                <TextBlock 
                                    Text="{Binding Icon.Text}"                                         
                                    Background="{Binding Icon.Background}" 
                                    Height="{Binding Icon.Height}" 
                                    Width="{Binding Icon.Width}"
                                    Padding="{Binding Icon.Padding}"
                                    FontSize="{Binding Icon.FontSize}"
                                    Visibility="{Binding Icon.Visibility}"
                                    TextAlignment="{Binding Icon.TextAlignment}">
                                </TextBlock>
                            </Border>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
        </Border>
    </StackPanel>
</Window>

字符串
如果需要更多的上下文或代码,请告诉我,我会将其添加到帖子中。

ttygqcqt

ttygqcqt1#

以下仅设置Visual Studio设计器使用的 * 设计时间 * DataContext

d:DataContext="{d:DesignInstance Type=local:MainViewModel}"

字符串
您还必须设置在运行时使用的实际DataContext属性。您可以在窗口的代码隐藏中执行此操作:

public MainWindow()
{
    InitializeComponent();
    DataContext = new MainViewModel();
}


或者在XAML标记中:

<Window x:Class="MemoryUI.MainWindow"
        ... d:DataContext="{d:DesignInstance Type=local:MainViewModel}">
    <Window.DataContext>
        <local:MainViewModel />
    </Window.DataContext>
    <StackPanel x:Name="MainContainer" Orientation="Vertical">
        ...
    </StackPanel>
</Window>


然后,假设Cards是返回IEnumerableMainViewModel类的公共属性,那么到Cards的绑定应该可以工作。
Card类的属性,或者不管你怎么称呼它,也必须是公共的,这样你在ItemTemplate中的绑定才能像预期的那样工作。

相关问题