- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个文本编辑器类型的应用程序。我可以通过选项卡打开多个编辑器。在我的第一次尝试中,我使用了简单的 TextBox
es 编辑文本。一切正常。然后我创建了一个 UserControl
封装文本框+按钮以执行文本操作,例如。粗体/斜体等。我发现当我打开不同的标签时,它们都包含相同的内容。例如。在 Tab1 中,我输入将出现在所有选项卡中的“hello world”。即使它们在不同的选项卡中,也没有“分离”
<Window.Resources>
<DataTemplate DataType="{x:Type vm:EditorTabViewModel}">
<me:MarkdownEditor />
</DataTemplate>
</Window.Resources>
然后我作为测试,一起尝试了一个文本框和用户控件,看看我是否有同样的问题。
<Window.Resources>
<DataTemplate DataType="{x:Type vm:EditorTabViewModel}">
<StackPanel>
<me:MarkdownEditor Text="{Binding Content}" Height="360" />
<TextBox Text="{Binding Content}" Height="360" />
</StackPanel>
</DataTemplate>
</Window.Resources>
然后我发现了一些奇怪的事情。使用新文档,内容应该是空的,我的 MarkdownEditor
在它的文本框中有“System.Windows.Controls.Grid”,因为它是一个网格绑定(bind)到文本。简单文字TextBox
按预期工作。我对所有 UserControl
仍然有同样的问题。 s 在具有相同内容的应用程序中。
UserControl
的 XAML
<UserControl x:Class="MarkdownEditMVVM.Controls.MarkdownEditor.MarkdownEditor" ...>
<Grid>
<ToolBar Grid.Row="0">
<Button Command="{x:Static local:Commands.PreviewCommand}">
<Image Source="../../Images/16/zoom.png" />
</Button>
<!-- more buttons -->
</ToolBar>
<TextBox Grid.Row="1" x:Name="txtEditor" AcceptsReturn="True" Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</UserControl>
我发现这与我在选项卡绑定(bind)到 ObservableCollection<TabViewModel>
的选项卡中呈现用户控件的方式有关。
假设我有一个 TabViewModel
即使只是一个空类
public class TabViewModel {}
然后在我的窗口
public partial class Window1 : Window
{
protected ObservableCollection<TabViewModel> _tabs;
protected ICollectionView _tabsCollectionView;
public Window1()
{
InitializeComponent();
this.DataContext = this;
_tabs = new ObservableCollection<TabViewModel>();
_tabs.Add(new TabViewModel());
_tabs.Add(new TabViewModel());
_tabsCollectionView = CollectionViewSource.GetDefaultView(_tabs);
}
public ICollectionView Tabs
{
get { return _tabsCollectionView; }
}
}
XAML
<TabControl ItemsSource="{Binding Tabs}" IsSynchronizedWithCurrentItem="True">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TextBox />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
我创建了一个简单的 Visual Studio 项目托管在@ mediafire说明这个问题。我觉得它与 TabViewModel
有关s 或选项卡数据模板
我通过添加另一个选项卡控件进一步测试了用户控件问题,这次没有 TabViewModel
<TabControl Grid.Column="1">
<TabItem Header="Tab 1">
<TextBox />
</TabItem>
<TabItem Header="Tab 2">
<TextBox />
</TabItem>
</TabControl>
一切正常。更新也发布到 mediafire
还有一个发现。这次,我测试了绑定(bind)。一切正常......
<TabControl Grid.Column="2" ItemsSource="{Binding Tabs}" IsSynchronizedWithCurrentItem="True">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding TabTitle}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TextBox Text="{Binding Text}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
更新也发布在@mediafire
好的,现在我做了一组更完整的测试
TextBox
, 标签绑定(bind)到 ObservableCollection<TabViewModel>
. TextBox
没有绑定(bind).观察到的问题ObservableCollection<TabViewModel>
的选项卡.没有绑定(bind) TextBox
.没问题ObservableCollection<TabViewModel>
. TextBox
没有绑定(bind).没问题UserControl
, 标签绑定(bind)到 ObservableCollection<TabViewModel>
. UserControl
没有绑定(bind).观察到的问题UserControl
, 标签绑定(bind)到 ObservableCollection<TabViewModel>
. UserControl
的绑定(bind).观察到的问题。文本绑定(bind)不起作用更新@ mediafire
最佳答案
大编辑响应更新
我可以通过执行以下步骤让您的 mediafire 示例正常工作:
Text
- 您不需要它将 TabControl
上的 ContentTemplate
更改为以下内容。这会导致将 UserControl.DataContext
属性设置为选项卡项 DataContext
<DataTemplate>
<local:UserControl1 />
</DataTemplate>
将您的 UserControl
更改为以下内容。这会将 Text
属性绑定(bind)到 UserControl.DataContext.Text
属性。
<TextBox Text="{Binding Text}" />
从 UserControl1
的构造函数中删除行 this.DataContext = this
- 这显然会为用户替换 DataContext
控制。
这导致选项卡与您上传的示例应用中的预期值正确绑定(bind)
原始答案
您可以拥有多个 UserControl
实例 - 这不是您的问题。
您看到“System.Windows.Controls.Grid”文本的原因是因为在您的 UserControl
中,您将 Text
属性绑定(bind)到 this。 DataContext.Text
而不是 this.Text
- 您的 UserControl
的 属性。
我认为您想要做的是将用户控件中的 TextBox
绑定(bind)更改为:
<TextBox Grid.Row="1" x:Name="txtEditor" AcceptsReturn="True"
Text="{Binding Path=Text,
UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type me:MarkDownEditor}}}" />
注意:这依赖于 me
命名空间被设置为指向您的 MarkDownEditor
所在的位置
关于c# - 我可以在 1 个应用程序中拥有同一个 UserControl 的多个实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4050303/
您好,我的 WPF UserControl 知识只有一个小时了。因此,如果有很多关于这个问题的教程或/和答案,请原谅我(老实说,我认为这无法完成,需要重新编写代码……因此我想问的原因) 因此,在创建
我看过几篇文章介绍如何删除在运行时添加的 UserControl,但我的问题有点不同。我有一个 UserControl,它由一个图像组成,右上角有一个小“x”按钮,用于从其父 Canvas 中删除自身
我有一个用户控件 UserControl1,它在其资源中定义了一种样式。该用户控件包含一个 UserControl2 实例,它引用了该样式:
我正在尝试以 How can a WPF UserControl inherit a WPF UserControl? 中提到的方式继承 WPF 中的用户控件 namespace DMS.Presen
我想创建几个具有一些通用功能的 WPF UserControl 类。出于这个原因,我想从一个新的基类派生类,而这个基类又派生自 UserControl。 我的问题是我的 C# 类是 部分 定义的,而自
这个问题在这里已经有了答案: Should a user control have its own view model? (6 个答案) How to correctly bind to a de
我有一个 UserControl,它包含另一个带有 Button 的 UserControl。我想在第一个 UserControl(父级)中向该按钮添加一个事件。我尝试这样做: void Page_I
我需要我所有的用户控件都具有一些类似的功能。所以我的用户控件是: using System.Windows.Controls; namespace WpfApplication26 { ///
以下 WPF UserControl 调用了 DataTypeWholeNumber,它有效。 现在我想创建一个名为 DataTypeDateTime 和 DataTypeEmail 等的 UserC
我有一个包含按钮和其他一些控件的 UserControl: ... 当我创建该控件的新实例时,我想获取 Button 的 Command 属性: 当然,“Th
我不确定这个问题是否已经发布,并且我已经检查了建议的 SO 链接,但似乎没有一个链接与该问题完全相关。因此,如果有人认为这可能是重复的,请发布建议答案的链接并原谅这篇文章。 解决我的问题的方法可能不止
我在 UserControl_1 中有两个 UserControl,有一个按钮可以在 MainWindow.axml 中的 StackPanel 中添加 UserControl_2。我在 UserCo
我正在开发一个由多个传感器组成的模块化项目,每个传感器都继承自一个抽象的 Sensor 类。为了配置每个传感器,我已经开始为每个传感器添加一个用户控制面板(继承自 UserControl),它在运行时
我正在使用 c#.net 我的网络表单中有不同的 View ,除了三个文本框(到达/看到/离开时间)之外,这些通常都显示不同的信息。为了尝试减少代码,我创建了一个包含这三个文本框的 UserContr
我有一个 UserControl,它有两个组件 public System.Windows.Forms.ComboBox innerComboBox; public System.Windows.Fo
我有一个包含 ListBox 的 userControl。我想从另一个 userControl 访问那个 ListBox。 例如: UserControl1.ListBox1.Items.Count;
我在更新另一个用户控件中的用户控件时遇到问题。 示例代码: UserControl MyCart1 = (UserControl)Page.FindControl("MyCart1"); Update
我在下面添加了一些屏幕截图和重现步骤。 我的数据模型有一个基类,我们称它为 CommonThing,它有很多属性。然后有几个具有附加属性的此类的特殊版本。我现在想创建一个 UI 来将数据输入到这个模型
我有一个应用程序,我需要确保在使用 ShowDialog() 单击用户控件上的按钮打开的表单将在我处理用户控件时关闭和处理。 我通过计时器在主窗体中调用 userControl.Dispose()。
我正在努力实现... 用户控件(MyRepeater) Control Start Control End 页面 Page Start Page Item Tem
我是一名优秀的程序员,十分优秀!