【求助】WPF开发中绑定静态属性后设计界面的显示问题,内详

残雪花沙 2016-12-04 06:34:09
最近学习WPF开发,开发时界面语言直接就考虑支持多语言……然后呢没考虑用WPF的资源来做,就自己写了……
目前使用的是一个静态类,程序启动时读取语言文件然后为这个类的每个属性赋值,前台xaml的控件直接绑定的这些属性……
当然这不是我要问的,我要问的是下面遇到的不知该如何解决的问题~~

我先后建了两个解决方案,第二个是第一个出问题后重新建的,然后主界面的前台代码未变,语言静态类的后台代码也没变,但是在VS中显示的设计界面却不同,第二个解决方案的界面显示明显不适合设计,因为全部都是显示为空{虽然没编译程序没启动时语言静态类的属性确实为空值}……不过同样的情况在打开第一个解决方案时,界面显示的是绑定的静态类属性的属性名……

以下截图说明,以其中的一个button控件为例:
两个项目中的这个控件的前台代码是这样的:
<Button Content="{x:static local:DisplayString.ToFullInterface}"/>
语言静态类对应的部分是这样的
static class DisplayString

public static ToFullInterface{get; private set}


然后在设计界面中第一个解决方案中Button显示的是类的属性名

第二个解决方案中显示的是空白


请问如何才能把第二个解决方案的设计显示为第一个那种。
...全文
370 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2016-12-05
  • 打赏
  • 举报
回复
public static ToFullInterface{get; private set} -》 ToFullInterface 声明成为某个类型。
残雪花沙 2016-12-05
  • 打赏
  • 举报
回复
引用 6 楼 xinweilee 的回复:
用自定义markupextension,在里面实现你的多语言处理,界面上content={yourmarkup propertyname}

我去试试,谢谢
xinweilee 2016-12-05
  • 打赏
  • 举报
回复
用自定义markupextension,在里面实现你的多语言处理,界面上content={yourmarkup propertyname}
残雪花沙 2016-12-05
  • 打赏
  • 举报
回复
引用 4 楼 Libby1984 的回复:
我拿你的代码实验一下,是可以的啊。
XAML
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="test" Height="350" Width="525">
<Button Content="{x:Static local:DisplayString.ToFullInterface}" Click="Button_Click"/>
</Window>

Code
public partial class MainWindow : Window
{
public MainWindow()
{
DisplayString.ToFullInterface = "DFDFDSF";
InitializeComponent();
}
}

结果

我如果给属性赋值了是正常显示的……
我的意思是,我希望在VS的设计界面上,当我控件绑定了某个静态属性时,设计界面上显示的是属性名而不是属性值……
你看我给的截图……第一张图是第一个方案里面的,设计界面显示的属性名而不是值……而同样的代码丢到第一个方案里面,设计界面显示的就是属性值(我没赋值所以是空的)而不是属性名……
另外在问个问题哈,朋友可知如何让类的静态属性也支持通知啊……就是支持属性值变化通知前台变化或者反过来,INotifyPropertyChanged接口貌似不支持静态属性……
  • 打赏
  • 举报
回复
我拿你的代码实验一下,是可以的啊。 XAML
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="test" Height="350" Width="525">
    <Button Content="{x:Static local:DisplayString.ToFullInterface}" Click="Button_Click"/>
</Window>
Code
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            DisplayString.ToFullInterface = "DFDFDSF";
            InitializeComponent();
        }
    }
结果
  • 打赏
  • 举报
回复
你将按钮的Content设为TextBlock,然后将TextBlock的Text属性设置为你要是静态属性试试。Content是objec类型的,我猜是不是类型转换的时候不对。
残雪花沙 2016-12-05
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
public static ToFullInterface{get; private set}
-》 ToFullInterface 声明成为某个类型。

啊……这里写漏了……
我写了类型的,是string……

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧