gpt4 book ai didi

wpf - Prism +标签=疼痛

转载 作者:行者123 更新时间:2023-12-01 00:05:25 29 4
gpt4 key购买 nike

我很难尝试使用 PRISM 2.0 for WPF 获得一个非常简单的场景。我希望我的应用程序的主要工作区是 TabControl .每次添加 View 时,我希望它显示为 TabItemTabControl .

听起来很容易对吧?

我的 Shell.XAML 中的区域如下所示:

<Controls:TabControl 
Name="MainRegion"
cal:RegionManager.RegionName="{x:Static Infrastructure:RegionNames.TabRegion}"
ItemContainerStyle="{StaticResource ShellTabItemStyle}" />

风格: ShellTabItemStyle看起来像这样:
<Style x:Key="ShellTabItemStyle" TargetType="{x:Type TabItem}">
<Setter Property="Header" Value="{Binding Content.DataContext.HeaderInfo, RelativeSource={RelativeSource Self}}" />
</Style>

这应该设置 HeaderTabItemHeaderInfo DataContext 上的属性(property)的看法。 (我从 this article 得到这个想法) DataContext我的观点是一个非常简单的 Presenter其中有一个 HeaderInfo属性:
public string HeaderInfo = "The Header Text";

我的 View 是一个简单的 WPF 用户控件,如下所示:
  <StackPanel>
<TextBox Text="Hello World" Name="MyTextBox"></TextBox>
<Image Source="..SomeImage.PNG" Name="MyImage"></Image>
</StackPanel>

到现在为止还挺好。如果我将 View 添加到该区域,我会得到一个选项卡控件,并且我会得到一个选项卡,其文本设置为“标题文本”。我的问题是标签上绝对没有内容。我的 View 包含一个简单的 ImageTextBox ,但它们都没有出现在 TabItem .如果我打开 Snoop 并环顾四周,则看不到任何图像。

我在这里错过了什么 - 有没有更简单的方法?

最佳答案

我无法获得任何建议的工作答案。广泛的谷歌搜索也没有帮助。周末我对这个问题进行了一些思考,我想的越多,我就越觉得有一点 代码气味 关于这种方法。您将 View 注入(inject)您的选项卡区域...发生了一些神奇的事情并添加了一个选项卡...您必须向存储在某处文件中的某些 XAML 样式添加一些难以理解的动态绑定(bind),这可能会或可能不会设置您的标题文本.如果其中任何一个元素有一点点错误,您将不会收到错误,但它不会起作用。

在我看来,除非您对 PRISM、模型和 XAML 有深入的了解,否则这既脆弱(即非常容易破坏)又非常难以理解。幸运的是,有一种更好更简单的方法可以做到这一点:

只需创建一个名为 TabRegionView 的 View ,其中仅包含一个空白 TabControl。您可能希望将此添加到您的 Shell.xaml。创建一个名为 InjectTabView 的事件,该事件具有 UserControl 类型的有效负载,并在您的 TabRegionView 控件中订阅此事件。当事件在 TabRegionView 中触发时,您手动创建 TabItem 并将 View 添加到 TabItem,如下所示:

public void TabAdded(UserControl view)
{
var item = new TabItem();
item.Content = view;
item.IsSelected = true;
item.Header = "Header Text";
mainTab.Items.Add(item);
}

当您想将 View 显示为新选项卡时,您的代码如下所示:
    var view = new View(params);
_eventAggregator.GetEvent<InjectTabViewEvent>()
.Publish(view);

这将由 TabRegionView 拾取, View 将添加为新选项卡。您可以轻松地将 View 包装在某种类型的线束中,其中包含标题文本、图像和 bool 值,以指示是否应自动选择选项卡。

恕我直言,这种技术具有双重优势,可以让您直接控制正在发生的事情,并且更容易遵循。

我很想从任何 PRISM 官员那里得到意见。

关于wpf - Prism +标签=疼痛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1614420/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com