繁体   English   中英

通过数据绑定将值传递给WPF / C#代码隐藏

[英]Pass Value through Data Binding to Code-Behind WPF/C#

我目前正在开发国际象棋游戏,并且正在尝试将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/zh-cn/library/hh848246.aspx 在构建基于XAML的UI应用程序时建议使用设计模式。

但是,要将在XAML标记中定义的元素的名称传递给背后的代码,可以处理该元素的Loaded事件。 例如,您可以将ImageTag属性设置为“ a8”,并在类似以下代码的代码中处理handle是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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM