C# 添加x:Name会导致编译错误";类型名称***不存在";
当我尝试将C# 添加x:Name会导致编译错误";类型名称***不存在";,c#,wpf,xaml,elementname,C#,Wpf,Xaml,Elementname,当我尝试将x:Name属性添加到自定义用户控件时,遇到了一个问题。以下是用户控件的代码,当用户单击列标题时,该控件将覆盖ListView项以提供排序: ListViewSorter.xaml <ListView x:Class="GenericProjectLibrary.Helpers.ListViewSorter" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Name
属性添加到自定义用户控件时,遇到了一个问题。以下是用户控件的代码,当用户单击列标题时,该控件将覆盖ListView
项以提供排序:
ListViewSorter.xaml
<ListView x:Class="GenericProjectLibrary.Helpers.ListViewSorter"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ListView.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment"
Value="Left" />
</Style>
<Style TargetType="Grid" x:Key="HeaderGridStyle">
<Setter Property="Height" Value="20" />
</Style>
<Style TargetType="TextBlock" x:Key="HeaderTextBlockStyle">
<Setter Property="Margin" Value="5,0,0,0" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
<Style TargetType="Path" x:Key="HeaderPathStyle">
<Setter Property="StrokeThickness" Value="1" />
<Setter Property="Fill" Value="Gray" />
<Setter Property="Width" Value="20" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="Margin" Value="5,0,5,0" />
<Setter Property="SnapsToDevicePixels" Value="True" />
</Style>
<DataTemplate x:Key="HeaderTemplateDefault">
<Grid Style="{StaticResource HeaderGridStyle}">
<TextBlock Text="{Binding }" Style="{StaticResource HeaderTextBlockStyle}" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="HeaderTemplateArrowUp">
<Grid Style="{StaticResource HeaderGridStyle}">
<Path Data="M 7,3 L 13,3 L 10,0 L 7,3" Style="{StaticResource HeaderPathStyle}" />
<TextBlock Text="{Binding }" Style="{StaticResource HeaderTextBlockStyle}" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="HeaderTemplateArrowDown">
<Grid Style="{StaticResource HeaderGridStyle}">
<Path Data="M 7,0 L 10,3 L 13,0 L 7,0" Style="{StaticResource HeaderPathStyle}" />
<TextBlock Text="{Binding }" Style="{StaticResource HeaderTextBlockStyle}" />
</Grid>
</DataTemplate>
</ListView.Resources>
<ListView.View>
<GridView></GridView>
</ListView.View>
</ListView>
我正试图根据在列表视图分类器中选择的项目数启用/禁用编辑和删除按钮。为此,我试图按元素名称绑定到ListViewSorter
,但当我向ListViewSorter
添加name
属性时,我得到了一个编译错误,因为“ListViewSorter”是在同一程序集中实现的,您必须设置x:name属性而不是name属性。当我将此更改为x:Name
时,我得到的错误是类型“GenericProjectLibrary”中不存在类型名称“Helpers”
我在StackOverflow上看到过类似的问题,但这些问题都与名称空间与视图/文件名相同的问题有关。我不认为这是问题所在。title完全没有总结“类型名'Helpers'在类型'GenericProjectLibrary'中不存在”的问题。在xaml中使用新类型之前,请重新生成projects@ASh我已经多次重建了这个项目,在我尝试添加x:Name
属性之前,一切都正常运行。我遇到了完全相同的问题。我到处都找不到答案。我尝试过删除中间文件等等,但没有任何效果。@BrianKE你发现问题出在哪里了吗?我有同样的problem@TomGaulton我一直无法解决这个问题。相反,我在绑定到ListView的模型中添加了一个名为“SelectItemsCount”的属性。然后,我将IsEnabled参数绑定到此模型属性。
namespace GenericProjectLibrary.Helpers
{
/// <summary>
/// Interaction logic for ListViewSorter.xaml
/// Original article: https://stackoverflow.com/questions/994148/best-way-to-make-wpf-listview-gridview-sort-on-column-header-clicking
/// Auto-Generate Columns: https://social.technet.microsoft.com/wiki/contents/articles/17635.the-equivalent-to-autogeneratecolumns-for-a-listviewgridview.aspx
/// </summary>
public partial class ListViewSorter : ListView
{
#region Initialization & Cleanup
GridViewColumnHeader _lastHeaderClicked = null;
/// <summary>
/// Default ctor
/// </summary>
public ListViewSorter()
{
InitializeComponent();
this.AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(GridViewColumnHeaderClicked));
}
#endregion Initialization & Cleanup
[snip]
}
}
<Window x:Class="GenericProjectLibrary.Views.PayrollDatabaseMappingWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:h="clr-namespace:GenericProjectLibrary.Helpers"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
mc:Ignorable="d"
SizeToContent="WidthAndHeight">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\Dictionary\StylesDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<StackPanel Name="StackPanel_PayrollDatabaseMappingGrid">
<h:ListViewSorter ItemsSource="{Binding Model.DatabaseInfo.PayrollDatabaseMappings, UpdateSourceTrigger=PropertyChanged}"
Margin="10"
ScrollViewer.CanContentScroll="True">
<ListView.View>
<GridView>
[snip]
</GridView>
</ListView.View>
</h:ListViewSorter>
<StackPanel Name="StackPanel_AddEditDeleteButtons"
Orientation="Horizontal"
HorizontalAlignment="Right"
Margin="5">
<!-- 'Add Payroll Database Mapping' button -->
<Button Name="AddPayrollDatabaseMappingsButton"
Content="Add Database Mapping"
Width="150"
HorizontalAlignment="Right"
Margin="5">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding}"
MethodName="AddPayrollDatabaseMappingButtonClicked" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<!-- 'Edit Payroll Database Mapping' button -->
<Button Name="EditPayrollDatabaseMappingsButton"
Content="Edit Database Mapping"
Width="150"
HorizontalAlignment="Right"
Margin="5"
IsEnabled="{Binding ElementName=ListView_PayrollDatabaseMappings, Path=SelectedItems.Count,
Converter={StaticResource EqualToBooleanConverter}, ConverterParameter=1}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding}"
MethodName="EditPayrollDatabaseMappingButtonClicked" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<!-- 'Delete Payroll Database Mapping' button -->
<Button Name="DeletePayrollDatabaseMappingsButton"
Content="Delete Database Mapping"
Width="150"
HorizontalAlignment="Right"
Margin="5"
IsEnabled="{Binding ElementName=ListView_PayrollDatabaseMappings, Path=SelectedItems.Count,
Converter={StaticResource GreaterThanEqualToBooleanConverter}, ConverterParameter=1}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding}"
MethodName="DeletePayrollDatabaseMappingButtonClicked" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</StackPanel>
</Window>