2009-10-26 95 views
2

我正在wpf中开发一个用户控件,我需要根据数据库中的值设置eclipse背景色。现在,该字段包含1到6之间的值。我如何绑定动态资源键值与wpf数据表中的列值

现在我希望根据该字段中的值,我的eclipse应具有不同的颜色。 我已经定义了6种不同的资源画笔。他们的关键值包含1到6个数字。

现在我知道我可以找到资源BU键或名称,但不希望这样。 我想要的是当我根据列中的值运行查询时,应该设置动态资源值。我不想做任何处理,我可以直接绑定动态资源价值...

,如果你是我的问题PLZ不明确指定,我要把我的代码...

回答

1

我觉得我ResourceKeyBinding扩展可能可以在这里帮助你。它允许您使用数据绑定来指定要使用的资源的密钥。

+0

不幸的是,这是行不通的。这是需要动态的关键名称(而不是资源本身)。 – senfo 2010-08-31 20:59:40

+1

@senfo:这正是ResourceKeyBinding所做的 - 可让您使用数据绑定来指定资源的密钥。 – 2010-09-01 09:14:13

+0

我的错误...我一定读了你的回答错误。我以为你指的是一个DynamicResource。 http://msdn.microsoft.com/en-us/library/ms748942.aspx 谢谢你的信息! – senfo 2010-09-01 15:04:00

3

如果你有1和6之间的值,你知道的风格应该是每个什么,你应该只设置有datatriggers为每个值(1-6)的样式,并设置任何每个触发器中值

<Window x:Class="WpfApplication8.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Style> 
    <Style TargetType="{x:Type Window}"> 
     <Setter Property="Background" Value="Pink" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=textbox, Path=Text}" Value="1"> 
       <Setter Property="Background" Value="Green"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding ElementName=textbox, Path=Text}" Value="2"> 
       <Setter Property="Background" Value="Red"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding ElementName=textbox, Path=Text}" Value="3"> 
       <Setter Property="Background" Value="Blue"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding ElementName=textbox, Path=Text}" Value="4"> 
       <Setter Property="Background" Value="Orange"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding ElementName=textbox, Path=Text}" Value="5"> 
       <Setter Property="Background" Value="Indigo"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding ElementName=textbox, Path=Text}" Value="6"> 
       <Setter Property="Background" Value="Violet"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Style> 
<Grid Background="Transparent"> 
    <TextBox x:Name="textbox" Width="200" Height="30" /> 
</Grid> 

+0

这实际上工作得很好,并且不需要任何代码更新。更不用说,它将XAML中的样式特定(并且不在代码中)保留在应该在的位置。非常感谢你的帖子! 顺便说一句,我不是这篇文章的原始作者,否则我会接受这是最好的答案。不知道是否有人比我更高的代表可以做到这一点。 – senfo 2010-09-01 15:25:47

+0

我很高兴它为你解决。 – JoshVarga 2010-09-01 15:32:31

+0

因为这对你有用,你可以标记为答案 – JoshVarga 2010-10-18 19:57:58