读书人

从Xaml代码中访问 代码隐藏文件 中定义

发布时间: 2012-03-09 16:54:58 作者: rapoo

从Xaml代码中访问 代码隐藏文件 中定义的静态成员
应用程序的 根命名空间 是WebTool
窗体类名是 Window1
Window1的代码隐藏文件中定义了静态字段WindowSelf: Public Shared WindowSelf As Window1
该字段会在构造函数中引用最后被创建的实例:
Sub New()
'…… ……
WindowSelf=Me
End Sub
Window1类型还定义了一个属性,URLs

简化后的Xaml代码如下:

XML code
<Window    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:scr="clr-namespace:WebTool"    x:Class="Window1"    x:Name="Window">        <StackPanel>            <TextBlock Text="{Binding Source={x:Static scr:Window1.WindowSelf},Path=URLs}"/>        </StackPanel></Window>


这一句<TextBlock Text="{Binding Source={x:Static scr:Window1.WindowSelf},Path=URLs}"/>
总是被提示 “WebTool.Window1不存在名为'WindowSelf'的静态成员”

请问这是怎么回事啊?我明明定义了WindowSelf这个静态字段的。
==========================================================================
其实我是想访问 当前窗体的URLs属性,一开始想了这么个笨办法来取得对窗体对象的引用。后来才想到可以直接用Binding的ElementName属性来指定窗体。
<TextBlock Text="{Binding ElementName=Window,Path=URLs}"/>
虽然目的是实现了,不过那个x:Static出错是为什么呢?
===========================================================================
还有一点很奇怪,虽然有错误提示,但是可以通过编译。不过编译后的程序不能用,运行后在 任务管理器 里可以看到进程,不过进程一下子又会消失。而且一旦进行了编译,VS里和调试相关的按钮就全都变为不可用状态了,怎么都恢复不了。
(好像上一次用VS编译Blend创建的工程也出现了这种情况)







[解决办法]
<TextBlock Text="{Binding Source={x:Static scr:Window1.WindowSelf},Path=URLs}"/>

这样的binding格式有问题。

VS里编译WPF绑定出现问题,会挂起进程,不允许Debug。

读书人网 >CAD教程

热点推荐