【问题标题】:Styling the title of a ChildWindow样式化 ChildWindow 的标题
【发布时间】:2011-12-08 22:24:16
【问题描述】:

我是 C# 和 wpf 的新手。我有一个 ChildWindow,其标题是从课堂外设置的。如果标题太长,我需要在末尾用省略号缩短标题。我是通过这样做完成的(代码被缩短):

<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",因为我认为它更有意义。是否有可能通过事件以某种方式做到这一点?

【问题讨论】:

    标签: wpf title childwindow


    【解决方案1】:

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

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

    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 设置为视图模型,如下所示:

    //Creating the child window
    ChildWindow child = new ChildWindow();
    ChildWindowViewModel childViewModel = new ChildWindowViewModel();
    child.DataContext = childViewModel;
    //do stuff with child...
    

    并将子窗口标题与 Xaml 中的 ViewModel 挂钩,如下所示:

    <Namespace:ChildWindow
             x:Class="Namespace.MyClass">
         <Namespace:ChildWindow.Title>
             <TextBlock Width="300" TextTrimming="WordEllipsis" Text="{Binding Path=Title}/>
         </Namespace:ChildWindow.Title>
    </Namespace:Childwindow>
    

    然后当你想改变标题时你可以使用

    childViewModel.Title = "A Very Long Title That Will Be Cut Short In Its Prime";
    

    在 ViewModel 上设置标题将触发 PropertyChanged 事件,这将导致 Xaml 视图使用新设置的值更新自身。这似乎是一种非常冗长的做事方式,但是如果您考虑一下这可以让您做什么几分钟,您会看到一些巨大的好处。绑定超出了简单的标题文本...

    希望一切都能按原样进行,但我是凭记忆做的,对任何错误深表歉意...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多