Windows 8 中的控件具有诸多属性(property),就是一些公共的数据成员,这些属性具有get和set方法,可以获取也可以设置这些属性,在Xaml中设置属性值方便的很,就像下面这样(以Button空间的Content属性为例):
<Button Name="TestButton" Content="Tap" Height="100" Width="200" Click="TestButton_Click" />
设置了一个Click事件,该事件由TestButton_Click方法处理,但是Button中的Content属性是Object^类型的,WinRT中所有的类都是从Objcet^类继承的。
我想实现这样一个简单的功能:如果按钮的内容是“Tap”我就把它改成“Hello”,如果不是,那我还把它改成“Tap 1231 12313”,现在问题来了,我怎么判断Content上面的字符串是不是“Tap”呢?
因为Content属性是Object^类型,那好,我就先建立一个String^类型的对象,再转换成Object^就行了
String^ str = ref new String^(L"Hello");
(Object^)str;
转换完成,那进行判断
void EventTest::MainPage::TestButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
void EventTest::MainPage::TestButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
if((TestButton->Content) ==(Object^)(ref new String(L"Tap")))
{
String^ str = ref new String(L"hello");
TestButton->Content = str;
}
else
{
String^ str = ref new String(L"Tap 1231 12313 ");
TestButton->Content =TestButton->Content->ToString();//这个东西显示的是:Windows.Foundation.IReferenc~1<String>
}
}
结果却不如我们所想,点击按钮,一直显示“Tap 1231 12313”,原因就是,其实这两个东西并不是在判断字符串是否相等,而是在判断这两个Object^对象是否相等。
那么,我看到Content中有一个ToSting()方法,返回值是一个String^,那我能不能通过这个来判断呢?结果是不行的,因为他们根本不是一个东西,ToString转换出来的东西是:Windows.Foundation.IReferenc~1<String>,应该是这个属性的相关信息。
如果把Content转换成String^类型的话就是字符串的比较了,这下结果就对了。
通过这个小小的问题可以看到:
1. String^类型的定义必须是ref new Sting(L"Ta"),其中L很重要
2. 判断内容是否相等必须转换成同一类型,而且是String^类型。
3. 可能有其他方法判断,里面有个Equal方法,但是也不能成功。如果有其他朋友用其他方法实现了该功能,请回复我,谢谢!
void EventTest::MainPage::TestButton_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
if((String^)(TestButton->Content) ==ref new String(L"Tap"))
{
String^ str = ref new String(L"hello");
TestButton->Content = str;
}
else
{
String^ str = ref new String(L"Tap 1231 12313 ");
TestButton->Content =str;
}
}
posted on 2012-02-15 15:31
Dino-Tech 阅读(415)
评论(0) 编辑 收藏 引用