内存卡游戏wpf问题

2023-12-07

我有一个记忆卡游戏,我的绑定是

public ObservableCollection<List<memoryCard>> MyCollection { get; set; }//holding the array 

其中初始化如下:

for (int i = 0; i < Size; i++)
        {
            List<memoryCard> list = new List<memoryCard>();

            for (int j = 0; j < Size; j++)
            {
                var card = new memoryCard(createRandomBrush(array, j));
                card.IsChecked = false;
                list.Add(card);
                card.PropertyChanged += (a, b) => Verify(b.PropertyName);
            }
            MyCollection.Add(list);
        }
**EDIT its now working except to the one EDIT in the middle who do me an hard time **
     private void Verify(string propName)
    {
        if (propName != "IsChecked2")
        {
            return;
        }

       // List<memoryCard> selected = new List<memoryCard>();
        foreach (List<memoryCard> observerListItem in MyCollection)
            foreach (memoryCard mycard in observerListItem)
                if (mycard.IsChecked == true)
                    selected.Add(mycard);

        if (selected.Count == 2)
        {
            if ((selected.First().buttonColor == selected.Last().buttonColor) && 
                (!selected.First().Equals(selected.Last()  )   )   )
            {
                if (firstClick)
                {
                    MessageBox.Show("Good.", "Result", MessageBoxButton.OK, MessageBoxImage.Information);
                    firstClick = !firstClick;
 selected.ForEach(cell => cell.buttonColor = Brushes.White);
                    //here the biding color of the toggle item should chang and it doesnt can someone explain me how to do it right ?ite
                }

                }
            }
            else
            {
                if (firstClick)
                {
                    MessageBox.Show("Bad.", "Result", MessageBoxButton.OK, MessageBoxImage.Error);
                    firstClick = !firstClick;
                }
            }
            selected.First().IsChecked = selected.Last().IsChecked = false;
            selected.Clear();
            firstClick = true;
         
        }

if (selected.Count!=0)selected.First().IsChecked = false; }

and my memoreycard class is :


 public class memoryCard : INotifyPropertyChanged
{
    #region c'tor
    public memoryCard(Brush _buttonColor)
    {
        buttonColor=_buttonColor;
    }
    #endregion
    private bool ?_isChecked = false;
    public bool ?IsChecked
    {
        get
        {
            return _isChecked;
        }
        set
        { 
            if (_isChecked != value)
            {
                _isChecked = value;
                //OnPropertyChanged("IsChecked");
                OnPropertyChanged("IsChecked2");
            }
        }
    }

    #region colorofbutton
        
        public Brush buttonColor;
        public Brush ButtonColor
        {
            get
            {
                return buttonColor;
            }
            set
            {
                buttonColor = value;
            }
            
        }
        #endregion

    
    
    #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
}

}

我尝试实现记忆卡游戏的目标 检查是否有两张卡的 IsCheck/ed 属性值 = true 并检查颜色是否相等,使 IsCheck/ed 属性中的此切换按钮为 null 但之前的算法不起作用!

这是我试图通过根据游戏而改变的结束切换按钮来实现的示例EDIT当上面的所有逻辑都正常工作时,我该如何使用触发器来做到这一点?...

<ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type ToggleButton}">
            <Grid>
                <Ellipse Name="elipse1" Height="65" Width="79" Fill="{Binding Path=ButtonColor}" Visibility="Collapsed"></Ellipse>
                <Ellipse Name="elipse2" Height="65" Width="79" Fill="Black" ></Ellipse>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="elipse1" Property="Visibility" Value="Visible"/>
                    <Setter TargetName="elipse2" Property="Visibility" Value="Collapsed"/>
                </Trigger>

                <Trigger Property="IsCheck" Value="null">
                    <Setter TargetName="elipse1" Property="Visibility" Value="Collapsed"/>
                    <Setter TargetName="elipse2" Property="Visibility" Value="Collapsed"/>
                </Trigger>

                
            </ControlTemplate.Triggers>
        </ControlTemplate>

** 编辑**

总结一下,我对我的代码有两个问题

  1. 我将卡片颜色更改为白色以验证为什么与他关联的切换按钮也没有更改他的颜色?

  2. 如何触发切换按钮始终为一种颜色?当一张卡片获得新颜色时,白色我希望他将其颜色更改为白色我怎样才能实现它?

    非常感谢。

EDIT2

我唯一的问题是绑定到颜色并更改颜色,如下所示:

     selected.ForEach(cell => cell.buttonColor = Brushes.White);

没有让用户界面注意到它,即使卡属性发生变化并调用

  OnPropertyChanged("ButtonColor");

用户界面不会改变它

EDIT3

现在我想要一个触发器,我打开它会给任何具有白色的切换按钮白色

       <ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type ToggleButton}">
            <Grid>
                <Ellipse Name="elipse1" Height="65" Width="79" Fill="{Binding Path=ButtonColor}" Visibility="Collapsed"></Ellipse>
                     <Ellipse Name="elipse2" Height="65" Width="79" Fill="Black" ></Ellipse>
     <Ellipse Name="elipse3" Height="65" Width="79" Fill="Black" Visibility="Collapsed" ></Ellipse>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="elipse1" Property="Visibility" Value="Visible"/>
                    <Setter TargetName="elipse2" Property="Visibility" Value="Collapsed"/>
                </Trigger>

                <Trigger Property="IsCheck" Value="null">
                    <Setter TargetName="elipse1" Property="Visibility" Value="Collapsed"/>
                    <Setter TargetName="elipse2" Property="Visibility" Value="Collapsed"/>
        <Setter TargetName="elipse3" Property="Visibility" Value="Visible"/>

                </Trigger>

当您设置您的ButtonColor, call PropertyChanged. So:

#region colorofbutton

    private Brush buttonColor; // Use the property accessors instead
    public Brush ButtonColor
    {
        get
        {
            return buttonColor;
        }
        set
        {
            buttonColor = value;
            OnPropertyChanged("ButtonColor");
        }

    }
    #endregion
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内存卡游戏wpf问题 的相关文章

  • 时间:2019-03-17 标签:c#datagridsqlpopulation

    我正在使用一个小型应用程序 用户可以在其中从 SQL 检索特定数据并用数据填充数据网格 用户可以从 SQL 数据库检索数据 在文本框中写入条形码 然后就会出现他搜索的数据 到目前为止我使用了这段代码 try if e Key Key Ent
  • 为什么多线程访问 WPF UI 控件会产生开销?

    我是否错过了 WPF 以及之前的 Windows 窗体 在开发多线程应用程序时需要编写大量重复代码的一些事情 应用程序中的每个 UI 控件最终都需要额外的代码行来获取和设置每个属性 internal delegate void SetEle
  • 方法执行时按钮禁用(PreviewLeftMouseDown/Up 必须可行)

    我需要一个如下的序列 按钮默认状态 按钮按下 按钮按下的方法 执行 并且按钮本身被禁用一段时间 由于 禁用 时间已过 按钮已启用 按钮向上 执行 按钮向上的方法 按钮默认状态 我已经尝试过这段代码 它的第一部分工作正常 但第二部分 Up 不
  • StockTrader RI > 控制器、演示者,WTF?

    我目前正在学习如何通过 Prism 复合 WPF 项目高级使用 WPF 我观看了很多视频和示例 演示应用程序 StockTraderRI 让我提出了这个问题 以下各部分的具体作用是什么 SomethingService 好的 这是管理数据的
  • 如何将图像转换为字节数组[重复]

    这个问题在这里已经有答案了 有人能建议我如何将图像转换为字节数组 反之亦然吗 我正在开发 WPF 应用程序并使用流读取器 将图像更改为字节数组的示例代码 public byte ImageToByteArray System Drawing
  • DispatcherTimer Stop 不停止

    更新 我把完整的代码放出来供参考 我正在尝试使用 Dispatcher 方法而不是 Forms Timer 我在方法结束时停止了 但在停止之前它一直循环多次 什么地方出了错 顺便说一句 我必须提到我确实在计时器 if 语句中使用了 Mess
  • 如何动态更改 WPF 中 DataGridTextColumn 绑定上的转换器?

    我真的不明白 WPF 和 XAML 并且继承了一些写得很糟糕的代码 所以我可能会扼杀它 但这里是 我继承了一个绑定到 Person 对象列表 在代码后面 的 DataGrid 其中必要的 DataGridTextColumn 在 XAML
  • 将 RenderTargetBitmap 转换为 System.Drawing.Image

    我有 3D WPF 视觉对象 我想将其传递到 Excel 单元格 通过剪贴板缓冲区 对于 普通 BMP 图像 它可以工作 但我不知道如何转换RenderTargetBitmap 我的代码如下所示 System Windows Media I
  • 上传大型 xml 到 WCF REST 服务 -> 400 错误请求

    我一直在尝试寻找这个错误 但到目前为止还没有运气 所以我的客户端上有一个带有此 web config 的服务
  • wpf缩放到文本框,当我单击文本框时,文本框无法显示光标

    Merged https meta stackexchange com questions 158066 what is a merged question with wpf缩放到文本框 当我单击文本框时 文本框无法显示光标 questio
  • 如何覆盖全局样式(没有 x:Key),或者将命名样式应用于所有类型目标控件?

    我声明了一个要应用于项目中所有按钮的样式 该样式位于 ResourceDictionary 中 现在 在某个窗口中 我想继承此样式但添加一个值
  • DataGrid 是 WPF 中的必需品吗?

    我看到很多讨论正在进行 人们询问 WPF 的 DataGrid 并抱怨 Microsoft 迄今为止还没有在其 WPF 框架中提供 DataGrid 我们知道 WPF 是一项出色的 UI 技术 并且具有 ItemsControl DataT
  • 如何为 WPF 工具包图表提供样式

    我在 WPF 应用程序中使用 WPF Toolkit Chart 和 PieChart 我想将饼图图片中的默认白色背景更改为透明 如何提供风格来实现这一目标 WPF 旨在允许您通过 XAML 设置控件样式 不是代码 还可以通过样式使饼图中的
  • 给 MVVM 中的 View 一些命令

    假设我有一些用户控制权 用户控件有一些子窗口 用户控制用户想要关闭某种类型的子窗口 用户控制代码后面有一个方法 public void CloseChildWindows ChildWindowType type 但我无法调用此方法 因为我
  • ListView选择单个项目,wpf

    我有一个列表视图 它的项目源是一个列表 我希望用户只选择一项 当我将列表视图的 SelectionMode 设置为 single 时 用户仍然可以选择多个项目 并且列表视图似乎变得疯狂并选择用户未选择的项目 看起来很奇怪 任何人都知道可能是
  • 如何用ListBox制作自定义控件?

    我想用自定义的项目模板制作水平ListBox 所以我制作了它的基本模板 但是 我找不到将 事物 绑定到 WPF XAML 的示例 尤其是在 ListBox 填充了自定义项的情况下 我只是想动态添加 删除列表框中的项目 其中包含图像 标签 组
  • 在 SVG 中旋转形状时保持旋转线性渐变不旋转

    SVG 或 WPF XAML 我对两者都持开放态度 并且需要 我不认为它们在实现上有任何不同 下面的示例是 SVG 中的 我试图找到一种在线性渐变上使用旋转的方法 在本例中为 270 但是当它填充的形状旋转时 保持线性渐变不变 就好像它填充
  • 如何在选项卡控件对象中禁用选项卡换行

    我正在 WPF C 中设计 GUI 并且使用Tab Control目的 我的tab control将包含很多选项卡 我想知道如何禁用对象的默认 包装 行为 基本上相反this https stackoverflow com question
  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • 在wpf中移动鼠标

    我目前正在寻找一种在 wpf 中移动鼠标的方法 我发现的只是我无法可靠实现的非托管方法调用 有没有一种简单的方法可以将鼠标光标移动到某个地方 即 双击后 我肯定在这里遗漏了一些东西 添加对System Windows Forms dll的引

随机推荐

  • git update remote 之后,新的上游分支可见,但原始分支不可见

    首先我的术语 上游 是原始的 apache 存储库 在 github 上 origin 是我的 apache repo 的分支 也在 github 上 执行以下命令后 git remote update git fetch 我看到 apac
  • 将集合复制到自身中

    如何将 mongodb 集合复制到自身中并发生冲突 id由一个新的解决 id 使用复制单个文档答案在这里对于大型集合来说是不可行的 我想这样做是为了人为地增加测试样本的大小 这只是为了测试可扩展性 所以我想 我可以将集合复制到自身中几次来达
  • onAuthStateChanged 更改 Firebase 3.0.0 后参考不会重新运行

    下面的代码附加了一个观察者users 路径并在值更改时记录用户 在火力基地上 这users 树的门控取决于当前经过身份验证的用户的访问权限 firebase auth onAuthStateChanged function user if
  • 如何正确终止信号处理程序中的线程?

    我想为 SIGSEGV SIGILL 和可能的其他一些信号设置一个信号处理程序 这些信号不是终止整个进程 而是终止有问题的线程 并且可能在某处设置一个标志 以便监视线程可以抱怨并启动另一个线程 我不确定是否有安全的方法来做到这一点 Pthr
  • 将日期数据从 SAS 传输到 R

    我将 sas7 数据集应用到 R 中 问这个问题很奇怪 我的变量之一是访问日期 现在看起来像这样 我想知道在哪里可以将它们转换回 MM DD YYYY 因为我需要排除小于 MDY 08 01 2010 的数据 gt chris visit
  • 添加 Web 引用将 IList 更改为 Array[]

    当我向客户端应用程序添加 Web 引用时 Web 引用类属性将从 IList 更改为数组 下面是片段 这其中有什么理由吗 我只是更喜欢使用 IList 因为它们非常动态 我可以在客户端将其更改为 ILists 吗 服务器端 DataMemb
  • 根据第一个下拉列表的结果填充第二个下拉列表

    目前我使用动态选择来填充下拉列表 我想做的是显示第二个下拉列表 其中包含基于第一个选择的结果 我不知道如何解决这个问题并寻找答案但无济于事 我已经包含了用于填充第一个菜单的代码 如果您需要任何进一步的代码 请告诉我 如果有人可以帮助编写代码
  • 在 Docpad 中仅显示部分博客文章,并带有“阅读更多”链接

    我只需要显示部分博客文章 以及完整博客文章的 阅读更多 链接 主页 列出最后 5 篇部分 介绍帖子 并附有 阅读更多 这在 Docpad 中可能吗 Thanks May by getCuttedContent content gt i co
  • Delphi 2007 未正确使用 JAX-WS Web 服务

    当我尝试使用我使用 JAX WS 在 Java 中设置的 Web 服务时 我遇到了 Delphi 2007 的问题 该 Web 服务可以从另一个 Java 程序和 C ASP NET 2 0 网站正常使用 但是 当我尝试使用 Delphi
  • 如何在Powershell上仅获取服务器的正常运行时间?

    我有以下代码 当我直接在 powershell 中使用时它可以工作 Get WmiObject win32 operatingsystem select LABEL LastBootUpTime EXPRESSION ConverttoDa
  • JS Iframe 加载器

    我正在寻找一种方法 在 iframe 加载时使用 jQuery js 显示 正在加载 消息 当 iframe 完全加载完毕时 正在加载 文本应该消失 jquery js 可以吗 注意 我对 iframe 内的网站没有任何控制权 div Pl
  • 我什么时候真正需要使用atomic而不是bool? [复制]

    这个问题在这里已经有答案了 Isn t atomic
  • javascript:onsubmit 仅在检测到“返回 false”时才执行

    我不太明白怎么onsubmit return validate 作品 为什么我必须return功能 仅当它检测到时才起作用return false从声明中
  • 使用ffmpeg在iPhone上显示视频

    任何人都可以帮助我吗 我有这个API ret avRecvFrameData avIndex buf VIDEO BUF SIZE char frameInfo sizeof FRAMEINFO t frmNo 缓冲区将填充来自编解码器的视
  • MaxAllowedNumWorkers 是由什么决定的?

    我想要matlabpool open 24 由于我的机器中 NumWorkers 的默认值为 12 所以我run myCluster parcluster local myCluster NumWorkers 12 Modified pro
  • 将 Google 地图与 C++ 程序集成

    我正在用 C 语言制作一个基于人工智能的两点之间的最短距离查找器 我的编码已经完成并且工作正常 现在我想将它与 Google Maps Api 集成 我想在谷歌地图上以图形方式显示最短距离 与谷歌地图显示方向完全相同 我被困住了 找不到任何
  • 如何在 GAC 中注册 .NET DLL 文件?

    我做了一个 NET DLL文件 我想将其注册到GAC 我已经使用过这个命令Windows Server 2003命令提示符 C Path of dll gt gacutil i dllname dll gacutil is not reco
  • @Validated 服务无法自动装配自身

    如果 Service 类使用 Validated 注释进行注释 则同一类无法自动装配自身 Service Validated public class SomeService Autowired private SomeService so
  • 使用表单中的数据通过宏更新数据库表

    我在 Libreoffice Base 中有一个表单 它连接到 歌曲 表 基本上是音乐数据库 我想做的是每次我选中 取消选中该表单上的复选框时 我希望每条记录的 已播放 字段与我当前在表格上要检查 取消检查的姓名和作者相同 我读到这样做的唯
  • 内存卡游戏wpf问题

    我有一个记忆卡游戏 我的绑定是 public ObservableCollection