通过数据绑定将代码传递给代码

我目前正在研究一款国际象棋游戏,并试图将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设计模式:https://msdn.microsoft.com/en-us/library/hh848246.aspx。 这是在构建基于XAML的UI应用程序时使用的推荐设计模式。

但是要将您在XAML标记中定义的元素的名称传递给代码隐藏,您可以处理该元素的Loaded事件。 例如,您可以将ImageTag属性设置为“a8”,并且在代码隐藏中处理Loaded事件,如下所示:

<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>

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
}
链接地址: http://www.djcxy.com/p/84599.html

上一篇: Pass Value through Data Binding to Code

下一篇: WPF Prism + Existing WPF Application