首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置ChildWindow标题的样式

设置ChildWindow标题的样式
EN

Stack Overflow用户
提问于 2011-12-09 06:24:17
回答 1查看 723关注 0票数 1

我是C#和wpf的新手。我有一个ChildWindow,它的标题是在类之外设置的。我需要的标题缩短与省略号在结尾,如果它太长。我是这样完成的(代码被缩短了):

代码语言:javascript
复制
<Namespace:ChildWindow
         x:Class="Namespace.MyClass">
     <Namespace:ChildWindow.Title>
         <TextBlock x:Name="_titleBlock" Width="300" TextTrimming="WordEllipsis"/>
     </Namespace:ChildWindow.Title>
</Namespace:Childwindow>

但是,我希望这个类的调用者能够设置ChildWindow.Title = "Something long"而不是ChildWindow._titleBlock = "Something long",因为我认为这样做更有意义。有没有可能通过某种方式通过事件做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-09 06:53:08

您真正想做的是使用MVVM模式将您的逻辑从视图中分离出来。这样,您就可以将ViewModel传递给操作子窗口的对象,而不是子窗口本身。

例如,子窗口的基本ViewModel可以是:

代码语言:javascript
复制
public class ChildWindowViewModel: INotifyPropertyChanged {
    private string _title;

    public string Title{
        get { return _title; }
        set{if (value != _title){
            _title = value;
            OnPropertyChanged("Title");
        }}
    }

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

    public event PropertyChangedEventHandler PropertyChanged;
}

然后,在创建子窗口时将DataContext设置为视图模型,如下所示:

代码语言:javascript
复制
//Creating the child window
ChildWindow child = new ChildWindow();
ChildWindowViewModel childViewModel = new ChildWindowViewModel();
child.DataContext = childViewModel;
//do stuff with child...

并将子窗口标题连接到Xaml中的ViewModel,如下所示:

代码语言:javascript
复制
<Namespace:ChildWindow
         x:Class="Namespace.MyClass">
     <Namespace:ChildWindow.Title>
         <TextBlock Width="300" TextTrimming="WordEllipsis" Text="{Binding Path=Title}/>
     </Namespace:ChildWindow.Title>
</Namespace:Childwindow>

然后,当您想要更改标题时,您可以使用

代码语言:javascript
复制
childViewModel.Title = "A Very Long Title That Will Be Cut Short In Its Prime";

在ViewModel上设置标题将触发PropertyChanged事件,该事件将导致Xaml视图使用新设置的值更新自身。这可能看起来像是一种非常冗长的工作方式,但如果你考虑一下这能让你在几分钟内做些什么,你会看到一些巨大的好处。装订远远超出了简单的标题文本...

希望这一切都能正常工作,但我是凭记忆做的,所以对于任何错误我深表歉意……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8438573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档