我正在尝试制作一个简单的Unity Standalone构建启动器(用于街机柜) - 设置非常简单 - 操纵杆上下突出显示游戏(在这种情况下,更改矩形的填充颜色和button1 lauches the正确的游戏。 我愚蠢地认为我可以在wpf中做到这一点,但是在第一道障碍中跌跌撞撞。
我有键盘输入(街机操纵杆通过i-pac2设置)工作(主窗口的焦点锁定)并且正在改变0-6之间的整数。这通过MainWindow上的代码工作(欢呼)并传递给名为 position 的静态int。
然后我打算有一系列基于这个int值突出显示的矩形。 我一直在测试一个矩形 - 使用dataTrigger来实现状态的改变 - 但它不会在键盘输入上更新。 代码剪......
<Rectangle x:Name="gameRect01" Height="74" Margin="10,93,32.667,0" VerticalAlignment="Top" Grid.ColumnSpan="2" IsEnabled="False">
<Rectangle.DataContext>
<local:Launcher/>
</Rectangle.DataContext>
<Rectangle.Style>
<Style TargetType="Rectangle">
<Setter Property="Fill" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path = cursorPos, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" Value="1">
<Setter Property="Fill" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
和Launcher类......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.ComponentModel;
namespace GameLauncher
{
class Launcher : INotifyPropertyChanged
{
public static int position = 0;
public int cursorPos
{
get
{ return position;
}
set
{
cursorPos = position;
RaisePropertyChanged("cursorPos");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
}
}
XAML代码似乎与 cursorPos 绑定 - 如果我更改了绑定中的值,则矩形会更改填充。
键盘输入肯定会改变 position 的值,但 cursorPos 中的值不会更新。
我觉得我错过了一些非常简单的东西,却找不到任何有用的东西(我一直在寻找和尝试过去3晚没有运气的修改)。我非常感谢有新人的一些指示。
谢谢, 彼得
更新 我已经根据以下反馈更新了Launcher ......
namespace GameLauncher
{
class Launcher : INotifyPropertyChanged
{
private int _position;
public int cursorPos
{
get {
return _position;
}
set {
_position = value;
RaisePropertyChanged(nameof(cursorPos));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
我的键盘输入代码如下所示......
namespace GameLauncher
{
public partial class MainWindow : Window
{
Launcher launcher = new Launcher();
private string gameGet;
public MainWindow()
{
InitializeComponent();
this.KeyDown += new KeyEventHandler(OnButtonKeyDown);
}
public void OnButtonKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Down || e.Key == Key.F) {
launcher.cursorPos = Math.Min(6, launcher.cursorPos + 1); Debug.WriteLine(launcher.cursorPos);
}
if (e.Key == Key.Up || e.Key == Key.R) {
launcher.cursorPos = Math.Max(0, launcher.cursorPos - 1); Debug.WriteLine(launcher.cursorPos);
}
if (e.Key == Key.LeftCtrl || e.Key == Key.LeftAlt || e.Key == Key.A || e.Key == Key.S || e.Key == Key.D1 || e.Key == Key.D2){
// gameGet = "testGame";
}
}
private void PlayButton_Click(object sender, RoutedEventArgs e)
{
// Launcher.PlayGame("test");
}
}
}
XAML代码是相同的,但它没有更新 - gah。我现在唯一能想到的是,通过实例化Launcher类来调用MainWindow是不正确的,我应该以另一种方式做到这一点?
答案 0 :(得分:0)
一般来说,最好将您的字段设为私有,并通过属性进行访问:
<?php
session_start();
$_SESSION["name-error"] = "Error";
echo "ERROR";
success : function(data){
if(data = "Error")
{
}
}
应该是
public static int position = 0;
我评论静态,因为只有在真正需要的时候才应该使用它。
将所有 private /*static*/ int position = 0;
替换为position = ...;
。如果你比我聪明,你甚至可以为它编写RegEx并让IDE完成你的工作; - )
另一点是,如果您使用C#6.0 cursorPos = ...;
,则可以使用nameof关键字来更改属性。如果您有一天重命名您的房产,这将使您更加头痛。
修改强>
RaisePropertyChanged(nameof(cursorPos));