C# 通过数据绑定将值传递给WPF/C后面的代码

C# 通过数据绑定将值传递给WPF/C后面的代码,c#,wpf,xaml,data-binding,path,C#,Wpf,Xaml,Data Binding,Path,我目前正在做一个国际象棋游戏,我正在尝试将C代码连接到XAML中的WPF接口。为了表示棋盘,我创建了一个8x8统一网格。 我想将网格的方形单元格的名称传递给代码,然后让一个方法返回相应块的图像路径。例如,如果广场a8上有一辆白色的车,这将保存在代码隐藏中。在xaml中,每个方块将传递其名称,例如“a8”,并接收到白车图像的路径。如果正方形上没有碎片,路径将链接到透明图像。到目前为止,我得到的是: <StackPanel Height="auto" Width="auto" Orientat

我目前正在做一个国际象棋游戏,我正在尝试将C代码连接到XAML中的WPF接口。为了表示棋盘,我创建了一个8x8统一网格。 我想将网格的方形单元格的名称传递给代码,然后让一个方法返回相应块的图像路径。例如,如果广场a8上有一辆白色的车,这将保存在代码隐藏中。在xaml中,每个方块将传递其名称,例如“a8”,并接收到白车图像的路径。如果正方形上没有碎片,路径将链接到透明图像。到目前为止,我得到的是:

<StackPanel Height="auto" Width="auto" Orientation="Vertical" Margin="-5,0,5,0" >
    <UniformGrid  Rows="8" Columns="8" Background="Black" Height="800" Width="800"  HorizontalAlignment="Stretch">
        <StackPanel Orientation="Vertical" Margin="1,1,1,1">
            <Image Source="Resources/WhiteSquare.png"/>
            <Image Source=""/>
            <!--{Bind path to method in code-behind; pass name (e.g. a8); function then returns path to appropriate image of piece-->
        </StackPanel>
    </UniformGrid>
</StackPanel>

如果能给我的xaml和c带来一些灵感,我将不胜感激。谢谢大家!

您可能应该研究MVVM设计模式:。在构建基于XAML的UI应用程序时,建议使用这种设计模式

但是,要将您在XAML标记中定义的元素的名称传递给后面的代码,您可以处理该元素的已加载事件。例如,您可以将图像的Tag属性设置为a8,并在代码中处理加载事件,如下所示:

<UniformGrid  Rows="8" Columns="8" Background="Black" Height="800" Width="800"  HorizontalAlignment="Stretch">
    <StackPanel Orientation="Vertical" Margin="1,1,1,1">
        <Image Source="Resources/WhiteSquare.png"/>
        <Image Tag="a8" Loaded="Img_Loaded" />
    </StackPanel>
</UniformGrid>

从绑定集合开始?使用ItemsControl显示它们,请参见和datatemplates List->将项目可视化为矩形,这样您就不必访问视图或思考如何传递值。。稍后您将使用mvvm。至于想法:您将需要类板包含单元格列表或字典、黑白图形列表、包含位置的单元格,例如A8和图形(如果有),以及由其他图形继承的基类图形。要使其可视化,请将ItemsControl.ItemsSource绑定到Board.Cells。您可以使用转换器显示白色/黑色单元格和/或bool属性为白色单元格,使用数据模板使每个单元格上的图形可视化,以便在单元格中设置一个图形。图视图将显示它。。。。
private void Img_Loaded(object sender, RoutedEventArgs e)
{
    Image img = sender as Image;
    string name = img.Tag.ToString();

    //set source of Image based on the value of name here...
    //see for an example http://stackoverflow.com/questions/350027/setting-wpf-image-source-in-code
}