当我尝试将valueconverter从定义的枚举状态绑定到画笔时,我的XAML设计器中出现错误:
找不到'OKStatus'资源.
该应用程序运行良好的运行时,但我无法在设计器中看到我的GUI.我的资源在color.xaml文件中定义,该文件在运行时读取.所有代码都在同一名称空间内
我的XAML:
的xmlns:配置= "CLR的命名空间:App.MyNamespace"
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="c:\Skins\Colors.xaml" />
<ResourceDictionary Source="c:\Skins\Common.xaml" />
</ResourceDictionary.MergedDictionaries>
<config:StatusConverter x:Key="StateConverter" />
<config:BoolConverter x:Key="BoolConverter" />
<config:BooleanConverter x:Key="BooleanConverter" />
</ResourceDictionary>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
和
状态
我的转换器:
[ValueConversion(typeof(bool), typeof(Brush))]
public class BoolConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
bool state = (bool)value;
FrameworkElement FrameElem = new FrameworkElement();
if (state == true)
return (FrameElem.FindResource("OKStatus") as Brush);
else
return (FrameElem.FindResource("ErrorStatus") as Brush);
}
public object ConvertBack(object value, Type targetType,
object parameter, …Run Code Online (Sandbox Code Playgroud) 我想将图像上传到服务器,将它们存储在文件系统(服务器外部)中,然后在我的JSF页面上显示它们.
我想找到这样的东西:
<?xml version="1.0" encoding="UTF-8"?>
<Context allowLinking="true" cookies="true" crossContext="true" override="true">
<Resources allowLinking="true"
className="com.triplemind.site.engine.SourceResolverContext"
homeDir="/home/myapp/files" />
</Context>
Run Code Online (Sandbox Code Playgroud)
我找到了一些解决方案,但我想知道是否有更好的方法来做到这一点.
我发现有jBoss文档:
任何帮助将不胜感激.提前致谢
我目前正在研究可以动态应用于我的应用程序的样式和模板字典.在这个"新想要的"动态行为之前,我有几个资源字典,每个样式控件一个,我在App.xaml中合并:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ColorsDictionary.xaml"/>
<ResourceDictionary Source="ControlsTemplatesDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
现在,我希望我的应用程序被设置样式,所以我决定将我以前的所有资源合并到一个名为"MyFirstTemplates"的新资源中,并且只将这个字典添加到App.xaml中.
新词典"MyFirstTemplates.xaml":
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">"
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ColorsDictionary.xaml"/>
<ResourceDictionary Source="ControlsTemplatesDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
新的App.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MyFirstTemplates.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Window}"/>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
注意:Window的默认样式是更正WPF 4的错误,请参阅将合并字典添加到合并字典
现在我已经做了这个改变,我不能再使用"ColorsDictionary.xaml"中的颜色资源作为"ControlsTemplateDictionary.xaml"中的StaticResource了.如果我改回到在app.xaml中合并这些文件,一切正常.为了使它工作,我必须为DynamicResource更改这些StaticResource.你知道为什么这不再起作用吗?
谢谢 :-)
当我在Window上将它用作StaticResource时,我有一个很好用的转换器,如下所示
<UserControl.Resources>
<local:ValidationErrorConverter x:Key="validationErrorConverter"/>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
我有一个ResourceDictionary来定义我的控件ControlTemplates和Styles,我无法弄清楚在哪里引用我的转换器作为StaticResource,以便能够在我的样式上使用它如下
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding
RelativeSource={RelativeSource Self},
Path=(Validation.Errors).CurrentItem,
Converter={StaticResource HERE??}}"/>
</Trigger>
</Style.Triggers>
Run Code Online (Sandbox Code Playgroud) 我有这样ResourceDictionary的Main.xaml:
<Window.Resources>
<ResourceDictionary>
<BitmapImage x:Key="Customer" UriSource="Icons/customer.png"/>
<BitmapImage x:Key="Project" UriSource="Icons/project.png"/>
<BitmapImage x:Key="Task" UriSource="Icons/task.png"/>
</ResourceDictionary>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
我最初使用以下方式设置图像:
<Image Name="TypeIcon" HorizontalAlignment="Left" VerticalAlignment="Center"
Source="{StaticResource Customer}" Height="16" Width="16"/>
Run Code Online (Sandbox Code Playgroud)
我试图改变TypeIcon的Source,从客户到项目投资在C#方法.
我尝试过使用:
TypeIcon.Source = "{StaticResource Project}";
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
无法隐式转换
string为System.Windows.Media.ImageSource
我尝试使用定义图像new ImageSource(),但这也不起作用.
如何Source在C#中以编程方式更改图像?
在WPF中,如何引用在不同XAML文件中定义的静态资源?它在同一个项目中.
如果我有这些词典:
dict1.xaml:
<Color x:Key="Color1">Red</Color>
dict2.xaml:
<SolidColorBrush x:Key="Brush1" Color={StaticResource Color1} />
这有效:
App.xaml中:
<MergedDictionaries>
<ResourceDictionary Source="dict1.xaml"/>
<MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)
SomePage.xaml:
<UserControl.Resources>
<MergedDictionaries>
<ResourceDictionary Source="dict2.xaml"/>
</MergedDictionaries>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
这不是:
App.xaml在应用程序级别合并.
我收到有关未找到Color1的错误.
为什么是这样 ?/它有办法解决吗?我知道这个例子很简单,但真正的例子太长了.基本上我只是想在不同的文件中组织我的样式和模板:
编辑:奇怪的是,如果我在代码中执行此操作Application_Startup,在设置RootVisual属性之前,我没有收到错误...我只是为什么感到困惑!
我有一个Button控件作为资源字典中的资源,如下所示:
<!--ButtonResources.xaml file-->
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button x:Key="buttonResource" Content={Binding BoundText}/>
</ResourceDictionary>
<!--ButtonResources.xaml file-->
Run Code Online (Sandbox Code Playgroud)
我现在用这以上按钮控制绑定到ContentControl中控制的内容属性在2个不同的视窗的.xaml文件,其中每个Window都有自己的DataContext,从而每一个窗口应该显示Content基于其上述按钮控制的ViewModel's BoundText属性值,如下对每个窗口.
<Window x:Class="TestClass1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ButtonResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ContentControl Content={StaticResource buttonResource}/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
但是,问题是两个Window都显示了BoundText属性的相同值,这意味着两个WPF Windows都具有来自资源的相同按钮控制实例,在Windows中都使用.
如何解决此问题,以便每个窗口从资源获取单独的按钮控件,并仍然从他们自己的ViewModel显示属性的不同值?BoundText
编辑:
由于下面提到的原因MSDN,我不能使用x:Shared ="False"属性来解决此问题:
•包含项的ResourceDictionary不得嵌套在另一个ResourceDictionary中.例如,对于已经是ResourceDictionary项的Style内的ResourceDictionary中的项,您不能使用x:Shared.
我对使用这些类型时数据绑定的工作方式感到有些困惑.
我读过你不能做以下事情
public partial class Window1 : Window
{
public ObservableCollection<string> Items { get; private set; }
public Window1()
{
Items = new ObservableCollection<string>() { "A", "B", "C" };
DataContext = this;
InitializeComponent();
}
}
<Window x:Class="WpfApplication25.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ComboBox>
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Items}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</Window>
Run Code Online (Sandbox Code Playgroud)
因为CompositeCollection没有datacontext的概念,因此使用绑定的任何内容都必须设置Source属性.如下:
<Window x:Class="WpfApplication25.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<CollectionViewSource x:Key="list" Source="{Binding Items}"/>
</Window.Resources>
<ComboBox Name="k">
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={StaticResource list}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</Window>
Run Code Online (Sandbox Code Playgroud)
但那是怎么回事?它将源设置为某些东西,但是在某些情况下,CollectionViewSource使用datacontext(因为它没有明确设置源).
因为"list"是在Window的资源中声明的,这是否意味着它获取了Windows DataContext?在这种情况下,为什么以下也不起作用?
<Window x:Class="WpfApplication25.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources> …Run Code Online (Sandbox Code Playgroud) wpf datacontext compositecollection collectionviewsource staticresource
从ResourceDictionary中定义的DataTemplate内部引用StaticResources时,我遇到了一些奇怪的行为.
在这个例子中,我使用ResourceDictionary中定义的DataTemplate填充数字1到9的列表框.
这是MainWindow.xaml代码:
<Window x:Class="testResources.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Width="525"
Height="350">
<Grid>
<ListBox Width="100" ItemTemplate="{StaticResource NumberTemplate}">
<ListBox.ItemsSource>
<Int32Collection>1,2,3,4,5,6,7,8,9</Int32Collection>
</ListBox.ItemsSource>
</ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)
它NumberTemplate在ResourceDictionary1.xaml中定义:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="NumberTemplate">
<Grid Background="{StaticResource CoolNumbersColor}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="35" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Background="{StaticResource CoolNumbersColor}" Text="{Binding Mode=OneWay}" />
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
StaticResource CoolNumbersColor在App.xaml中定义ResourceDictionary1.xaml.这是我的App.xaml文件:
<Application x:Class="testResources.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<SolidColorBrush x:Key="CoolNumbersColor">GreenYellow</SolidColorBrush>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ResourceDictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
首先,我可以在Visual Studio 2010设计器中看到预期的行为.确实会出现一个彩色的数字列表.但是在尝试运行此示例时,我收到错误
"找不到名为'CoolNumbersColor'的资源.资源名称区分大小写"
我不明白为什么会这样.CoolNumbersColor评估是否以某种方式推迟?从词汇上讲,它位于合并的resourcedictionary之前.
使这项工作的唯一方法(除了使用DynamicResources)是创建第二个ResourceDictionary(例如ResourceDictionary2.xaml),CoolNumbersColor在那里定义并将它们全部合并为ResourceDictionary.MergedDictionaries:
<Application x:Class="testResources.App" …Run Code Online (Sandbox Code Playgroud) staticresource ×10
wpf ×8
xaml ×5
c# ×3
.net-4.0 ×1
datacontext ×1
datatemplate ×1
dictionary ×1
java ×1
jboss ×1
jboss7.x ×1
merge ×1
silverlight ×1