Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
我在 xaml 中收到类似“类型引用无法找到名为“Sign”的公共类型”的错误。我该如何解决它。 Sign 类位于同一个程序集中。 我在 xaml 中收到类似“类型引用无法找到名为“Sign”的公共类型”的错误。我该如何解决它。 Sign 类位于同一个程序集中。 <DataTemplate DataType="{x:Type local:Sign}"> <Expander Padding="4" IsExpanded="{Binding RelativeSource={ RelativeSource Mode=FindAncestor, AncestorType={ x:Type ListBoxItem}}, Path=IsSelected}"> <Expander.Header> <TextBlock Text="{Binding Name}" ... /> </Expander.Header> <DockPanel LastChildFill="True"> <Border DockPanel.Dock="Left" CornerRadius="16" BorderBrush="WhiteSmoke" Background="AliceBlue" BorderThickness="5" HorizontalAlignment="Center" VerticalAlignment="Center"> <Image Source="{Binding Icon}" Width="90" Height="90" Stretch="Fill" /> </Border> ... </DockPanel> </Expander> 如果类型与您正在修改的 XAML 驻留在同一程序集中,请在导入命名空间时省略 clr 命名空间的程序集段。 做 xmlns:local="clr-namespace:NamespaceContainingSignClass" 不要 xmlns:local="clr-namespace:NamespaceContainingSignClass;assembly=AssemblyContainingSignClassAndXAML" 对于那些在我的船上没有得到谷歌上这个错误的前 1,00 个结果帮助的人......就我而言,这与 smelch 的建议完全相反:我必须在我的 xmlns 声明结束。我猜可能是因为我的特殊情况 - 我的数据模板位于独立的资源字典 xaml 文件中。没有把握。我只知道它不起作用直到我添加了程序集信息,所以对于那些在那里挣扎的人来说,请重击一下,看看它是否有效。我不想深入探讨为什么,它就是这样。 检查xaml文件的根标签是否具有将类Sign映射到local别名的命名空间:xmlns:local="clr-namespace:NamespaceContainingSignClass" 检查班级Sign是否被标记public 检查类Sign是否有无参构造函数 仔细检查这个问题的所有答案 - 我确信其中一个是正确的,但我不知道哪一个对我有用。 保存项目,关闭 Visual Studio,然后重新打开 Visual Studio。 瞧,它现在神奇地工作了,尽管没有改变任何东西。 低声咒骂微软,然后继续你的生活...... 现在遇到这个错误。问题是我从程序集中引用的类位于具有更高框架级别的程序集中(4.7.2 与 4.6)。版本对齐解决了问题。 另一件事要检查,因为我今天刚刚解决了同样的问题...出于某种原因,我们有一个 xaml 文件,它添加了 Resource 而不是 Page 的构建操作。在该文件中,并且仅在该文件中,我们必须在命名空间声明中使用 assembly= 才能使其正常工作。自从 13 年前添加该文件以来,情况一直如此,其中的所有内容似乎都运行良好,直到现在我们才发现任何问题。 令我们困惑的是,我们正在创建 .NET 6 版本的 DLL,而新项目具有所有相同的代码和 xaml 文件,但不是该项目的 .NET Framework 版本的直接克隆。按照其设置方式,相关 XAML 文件的编译方式与所有其他文件相同,这意味着它不能在命名空间中包含 assembly= 部分。因此,有一段时间,我被误导,认为这可能是 .NET 6 与 .NET Framework 项目的差异。幸运的是,我注意到 XAML 文件在旧版本的项目中被设置为 Resource,一旦我修复了这个问题,在项目的两个版本中一切都工作正常(已删除 assembly=)。 我刚刚发现了另一个问题,可能会导致此问题。 允许在项目名称中使用点,例如 FancyTrainsimTools.Desktop 是有效的项目名称。如果您在项目中使用文件夹,您可能会得到如下结构: FancyTrainsimTools.Desktop.Logic 如果您定义引用此文件夹中的项目的数据模板,则会导致错误消息。我还使用了分层数据模板,但这给出了略有不同的消息。 解决方法: 通过删除点来重命名您的项目: FancyTrainsimToolsDesktop 编辑:我尝试再次重现该问题,以便报告错误,但现在一切正常......所以谜团尚未解决,并且不清楚如何创建解决方案...... 对于 .Net 框架。 检查另一个类,以防丢失的类即使在那里也无法解决,并且它在 NuGet 中,问题可以在参考 HintPaths 中。在文本编辑器中打开 .csproj 文件,查看包引用是否与 HintPath 匹配。 例如: <Reference Include="System.IO.Pipelines, Version=7.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <HintPath>..\packages\System.IO.Pipelines.7.0.0\lib\net462\System.IO.Pipelines.dll</HintPath> </Reference> HintPath 需要更新以引用版本 7.1.0 的文件夹,就像参考一样。 有时 Visual Studio 不会更新 HintPath,这会带来麻烦。 我已经通过以下方式解决了这个问题: 将类移至 xaml 后面的代码中 继承wpf类即可识别(如:IValueConverter)
如何在 WPF 中使用 3D 模型可视化来自 6 轴陀螺仪的数据?
我有一个 PS4 游戏控制器,我现在可以使用 HID 从中读取数据,包括 6 个轴,如下图所示。 三个轴代表加速度,另外三个轴代表角速率...
由于某些特殊原因,我在 C# 代码中声明了一个绑定,而不是像往常一样在 XAML 中声明它。我面临的问题是,当我仅更改对象的一个属性时,
我正在尝试在 WPF 中组合一个具有子视图的控件。 子视图的数量(可以增加或减少)从 1 到 10。我希望主视图能够显示这一点。 如果可以的话我愿意
我将此切换按钮用于我的设置窗口。当我切换到设置窗口时,我可以看到处于打开状态的每个切换按钮的动画。我希望它们已经完全启用
我正在 WPF 中构建一个演示应用程序,这对我来说是新的。我当前正在 FlowDocument 中显示文本,并且需要打印它。 我正在使用的代码如下所示: PrintDialog pd = 新 PrintD...
我的 TextBlock 中的文本绑定到我的代码中的元素。但是,当我第一次打开窗口时,文本块完全是空的。当我添加文本时,我需要 ScrollViewer 来允许我滚动...
为了在两个轴(X 和 Y)上具有相同的比例,我使用了 PlotType.Cartesian 来确保: _model = 新的 PlotModel(); _model.PlotType = PlotType.笛卡尔; 我也可以缩放...
通常我必须设置2个不同的图标。一个位于项目的设置选项卡中,另一个位于主窗口的 Icon 属性中。有没有办法为整个应用程序定义单个图标(所有窗口......
我编写了一个简单的 MSN 风格的程序,它将使用 WCF 发送和检索消息。主窗体包含一个文本框,用于输入要发送的消息。应用程序在后台进行民意调查...
我需要将 TextRange 添加到流文档,而不丢失在 RichTextBox 中对其完成的格式设置。我正在获取 RichTextBox.Text,它将其转换为字符串并丢失所有格式,但我不知道...
如何使用Winappdriver访问GridView单元格?
我正在尝试使用 winappdriver 从 WPF 项目中的 GridView 获取单元格值。 我遇到了这一行的问题: 字符串名称 = row.FindElementByName("Name1").Text; 一个元素不能是 l...
我在 WPF 中使用 MaterialDesign for XAML 包。当我运行我的应用程序时,所有样式和控件都会按预期呈现。然而,在 XAML 设计器中,我有很多错误,例如“The
我想在我的 WPF 应用程序中创建一个 DataGrid,它有 2 行和 14 列。我定义了一种在运行时创建此数据网格的方法。 我面临的问题是...
首先我们来看一段这样的代码: 首先我们来看一段这样的代码: <Window x:Class="WpfTest.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfTest" mc:Ignorable="d" Title="Window1" Height="500" Width="800"> <Window.Resources> <Style x:Key="b" TargetType="Border"> <Style.Setters> <Setter Property="Width" Value="200" /> <Setter Property="Height" Value="200" /> <Setter Property="BorderBrush" Value="Black" /> <Setter Property="BorderThickness" Value="2" /> <Setter Property="Margin" Value="4" /> </Style.Setters> </Style> </Window.Resources> <WrapPanel> <Border Style="{StaticResource b}" /> <Border Style="{StaticResource b}" /> <Border Style="{StaticResource b}" /> <Border Style="{StaticResource b}" /> </WrapPanel> </Window> 然后,我想要实现的效果是,当我点击一个Border时,该Border的边框颜色变为红色,如果之前点击过其他Border,则该Border的边框颜色为黑色(相当于变回原来的颜色) . 目前我想到的可行方法是给每个边框绑定一个mouseclick RoutedEvent,让wrappanel监听这个事件。当事件被触发时,让wrappanel遍历它的孩子。如果有一个孩子的名字等于事件源的名字,请更改此边框颜色,并且不要忘记将所有其他孩子设置为黑色。 但是我觉得这种做法有点麻烦。有没有更优雅简单的处理方式?(不要使用mvvm或其他框架) 另外,我尝试了一个想法,就是当点击边框时,将边框的名称赋值给wrappanel的datacontext,然后为边框设置datatrigger。条件是wrappanel的数据上下文与边框的名称相同。但是经过测试,这是不可能的。“value”的值不能是{binding ...}。 您可以使用带有 WrapPanel 的 ListBox 作为 ItemsPanel 和最简单的 ItemContainerStyle ,而不需要所有标准项目状态可视化。 将 DataTrigger 添加到绑定到每个 Border 的 ListBoxItem 容器的 IsSelected 状态的边框样式。您还必须添加透明背景以使边框命中测试可见。 您也可以将 Border 及其 DataTrigger 移动到 ItemContainerStyle 中,但随后您必须将某种数据项添加到 ListBox 的 Items 或 ItemsSource 集合中。 <ListBox> <ListBox.Resources> <Style x:Key="b" TargetType="Border"> <Setter Property="Width" Value="200" /> <Setter Property="Height" Value="200" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="BorderBrush" Value="Black" /> <Setter Property="BorderThickness" Value="2"/> <Setter Property="Margin" Value="4"/> <Style.Triggers> <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True"> <Setter Property="BorderBrush" Value="Red"/> </DataTrigger> </Style.Triggers> </Style> </ListBox.Resources> <ListBox.ItemsPanel> <ItemsPanelTemplate> <WrapPanel/> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListBoxItem"> <ContentPresenter/> </ControlTemplate> </Setter.Value> </Setter> </Style> </ListBox.ItemContainerStyle> <Border Style="{StaticResource b}" /> <Border Style="{StaticResource b}" /> <Border Style="{StaticResource b}" /> <Border Style="{StaticResource b}" /> </ListBox>
这是计划 - 这是一个很好的计划,但是有众所周知的砖墙。我在数据库中以 Byte() 形式存储了 Word 文档 - 我需要提取选定的文档并将其作为 word 保存到临时目录中
我正在使用 Visual Studio 2022 (17.9.3) 并创建了一个 .NET Framework 4.8 库项目,其中包含使用 MVVM 数据绑定到视图模型的控件,遵循如下模式: 我正在使用 Visual Studio 2022 (17.9.3),并创建了一个 .NET Framework 4.8 库项目,其中包含使用 MVVM 数据绑定到视图模型的控件,遵循如下模式: <UserControl x:Class="WpfControls.TypeListControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:MyControlLibrary" xmlns:viewModels="clr-namespace:MyControlLibrary.ViewModels" mc:Ignorable="d" d:DesignHeight="250" d:DesignWidth="200"> <UserControl.Resources> <viewModels:MyViewModel x:Key="MyViewModel"/> </UserControl.Resources> <Grid d:DataContext="{Binding Source={StaticResource MyViewModel}}"> <!-- etc.. --> </Grid> </UserControl> 控件和关联的视图模型都包含在同一个项目(程序集)中。 我看到控件中显示设计时数据,但当我构建控件并构建视图模型时,我看到控件显示视图模型中的过时内容。就好像设计者正在缓存程序集,并且在我进行更改和重建时不会使其无效。 这样做的一个影响是设计者看不到新添加的类型(例如视图模型),因此 XAML 引用会触发错误。 我尝试过重新加载项目、重新加载解决方案、重新启动 Visual Studio、删除 .obj 和 .bin 文件夹、删除 .vs 文件,所有这些都没有任何影响。这让我相信 VS 设计者正在将程序集缓存在某个地方,但我不知道在哪里。如果是这种情况,该缓存位于哪里,如何清除它? 编辑: 我的解决方案包括一个使用该库的 WPF 应用程序。如果我重建应用程序,库设计视图会更新以正确显示。我看起来好像有一个缓存可以通过应用程序构建正确地失效,但不能通过组件程序集的构建正确地失效。 以下方法可能有助于解决您的问题。如果还有问题,请分享项目结构和完整的代码,可以重现您的问题,以便我分析。 方法一: <UserControl x:Class="WpfControlLibrary1.UserControl1" ... xmlns:viewModels="clr-namespace:WpfControlLibrary1.ViewModels" > <UserControl.DataContext> <viewModels:ViewModel /> </UserControl.DataContext> <Grid > <DataGrid ItemsSource="{Binding Users}" AutoGenerateColumns="False" > <DataGrid.Columns> <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>... </DataGrid.Columns> </DataGrid> </Grid></UserControl> 方法2: <UserControl x:Class="WpfControlLibrary1.UserControl1" ... xmlns:local="clr-namespace:WpfControlLibrary1" xmlns:viewModels="clr-namespace:WpfControlLibrary1.ViewModels" d:DataContext="{d:DesignInstance viewModels:ViewModel}" > <Grid > <DataGrid ItemsSource="{Binding Users}" AutoGenerateColumns="False" > <DataGrid.Columns> ... <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> </DataGrid.Columns> </DataGrid> </Grid> </UserControl> public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); DataContext = new ViewModel(); } }
Application.Startup 事件限制(bug?)
它说,我可以使用启动事件来做很多事情,比如初始化、创建多个表单等等。 但是,尝试创建一个新的 WPF 应用程序并添加此事件处理程序: 私人空间
如何通过命令或转换器将 RowDetailsTemplate 绑定到 ViewModel 中的 bool 变量?
我想做那样的事情,但我不知道如何将 RowDetailsVisibilityMode 绑定到 MVVM 中 ViewModel 的 bool 变量。 当我选择行时,RowDetailsVisibility 会折叠,但如果我单击按钮
我正在开发一个 WPF 应用程序,并创建了两个数据网格,如附图所示。第二个数据网格是使用 CreateCoachCompositionDataGrid() 方法动态创建的。 T...