我有一个ObservableCollection项,我需要能够更新并使用ICollectionView表示数据.
以下是相关的代码:
private ObservableCollection<Hero> heroesDBHeroes;
public ObservableCollection<Hero> HeroesDBHeroes
{
get
{
return heroesDBHeroes;
}
set
{
heroesDBHeroes = value;
OnPropertyChanged("HeroesDBHeroes");
}
}
private void HeroesDBAddHeroes()
{
if(HeroesDBHeroes != null)
{
HeroesDBHeroes.Clear();
}
HeroesDBHeroes = Hero.GetAllHeroes();
HeroesDBFilteredHeroes = new ListCollectionView(HeroesDBHeroes);
HeroesDBFilteredHeroes.Filter = new Predicate<object>(HeroesDBFilterHeroes);
HeroesDBFilteredHeroes.Refresh();
OnPropertyChanged("HeroesDBFilteredHeroes");
}
Run Code Online (Sandbox Code Playgroud)
这是CollectionView及其过滤器:
public CollectionView HeroesDBFilteredHeroes { get; set; }
public bool HeroesDBFilterHeroes(object item)
{
Hero h = item as Hero;
bool ID, Name, GoldMinimum, GoldMaximum, PlatinumMinimum, PlatinumMaximum, DBTag, ReleaseDateStart, ReleaseDateEnd, Available, Sale, Featured, New, F2P, …Run Code Online (Sandbox Code Playgroud) 在我的 WinUI 3 应用程序中,我尝试使用位于另一个项目中的 ResourceDictionary。
假设引用的项目是ResourceTestLib,该库项目有一个文件夹“Styles”,其中有一个文件“_Thickness.xaml”。
在app.xaml主应用程序的文件中,我在“此处的其他合并字典”注释下方尝试了这两种方法,但它们似乎都不起作用,即该应用程序在启动时崩溃,并显示消息“无法找到资源......”消息。
这是我的 app.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
<!-- Other merged dictionaries here -->
<ResourceDictionary Source="/ResourceTestLib;component/Styles/_Thickness.xaml"/>
<ResourceDictionary Source="pack://application:,,,/ResourceTestLib;component/Styles/_Thickness.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在相应的行上时,Visual Studio 会显示一个工具提示,其中第一个引用的行显示“路径 X 未找到”,第二个引用的行显示ResourceDictionary“路径中的字符无效”(可能是因为“应用程序:,,,”)消息。
我认为 WinUI XAML 在这方面可能与 WPF XAML 不同?或者甚至还不支持这一点?
我已经开始使用 WinUI 3,这是 Microsoft 的新 UI 技术。
我有一个TextBox我想将其设置为只读的,即IsReadOnly="True"(备注:用户仍然可以从中复制内容,这就是为什么我不想将其设置为禁用,即IsEnabled="False"。)
当将其设置为时,IsReadOnly="True"我注意到TextBox仍然保留其默认的白色背景。我想改变这一点,以避免用户因为认为可以更改其内容而点击它。
我决定为背景设置某种灰色:
<TextBox IsReadOnly="True" Background="SlateGray" Text="The content..."></TextBox>
Run Code Online (Sandbox Code Playgroud)
这按预期工作,但有一个问题:一旦鼠标悬停在背景上,TextBox背景就会变回白色。当鼠标不再位于 上时TextBox,颜色变回指定的灰色背景颜色。
在 WPF 中,我会尝试一些 DataTrigger 以保持格式,但 WinUI 中还没有 DataTrigger(还?)。
我还尝试设置其他与颜色相关的属性,以TextBox查看它们是否与上述行为有关,但设置这些属性并没有改变任何内容:
FocusVisualPrimaryBrush, FocusVisualSecondaryBrush, SelectionHighlightColor, SelectionHighlightColorWhenNotFocused
Run Code Online (Sandbox Code Playgroud)