2012-03-07 57 views
1

iv'e得到了一组形状,我需要根据两个条件决定哪些保持可见和哪些隐藏 (这将代表骰子视觉)如何将值传递给转换器,这是绑定元素中的属性

(1)它们通过绑定从它们的数据上下文中获得的值。

(2)他们,我保存在它的每个形状组中的位置的值的标记属性

我需要转换器来获取标签属性作为参数每个形状

我结合:(不正确的)

<Style TargetType="{x:Type Ellipse}"> 
    <Setter Property="Visibility" Value="{Binding Path=., Converter={StaticResource MyDiceInputToVisualConverter}}"></Setter> 
</Style> 

我的形状:

<Canvas DataContext="{Binding Path=DataContext.Dice1,RelativeSource={RelativeSource AncestorType=StackPanel}}"> 
     <Ellipse Tag="1" Canvas.Left="5" Canvas.Top="5"></Ellipse> 
     <Ellipse Tag="2" Canvas.Left="5" Canvas.Top="20"></Ellipse> 
     <Ellipse Tag="3" Canvas.Left="5" Canvas.Top="35"></Ellipse> 
     <Ellipse Tag="4" Canvas.Left="20" Canvas.Top="20"></Ellipse> 
     <Ellipse Tag="5" Canvas.Left="35" Canvas.Top="5"></Ellipse> 
     <Ellipse Tag="6" Canvas.Left="35" Canvas.Top="20"></Ellipse> 
     <Ellipse Tag="7" Canvas.Left="35" Canvas.Top="35"></Ellipse> 
    </Canvas> 

我的转换器不应该感兴趣,它只是返回可见或隐藏根据 骰子值和骰子上Dot的位置。

任何想法如何我可以发送转换器的标签属性,或者在转换器中引用它?

在此先感谢。

编辑:

我最终明确设置在每个椭圆形的标记绑定:

<Canvas DataContext="{Binding Path=DataContext.Dice1,RelativeSource={RelativeSource AncestorType=StackPanel}}"> 
    <Ellipse Tag="1" Canvas.Left="5" Canvas.Top="5" Visibility="{Binding Path=., Converter={StaticResource MyDiceInputToVisualConverter},ConverterParameter=1}"></Ellipse> 
    <Ellipse Tag="2" Canvas.Left="5" Canvas.Top="20" Visibility="{Binding Path=., Converter={StaticResource MyDiceInputToVisualConverter},ConverterParameter=2}"></Ellipse> 
    <Ellipse Tag="3" Canvas.Left="5" Canvas.Top="35" Visibility="{Binding Path=., Converter={StaticResource MyDiceInputToVisualConverter},ConverterParameter=3}"></Ellipse> 
</Canvas> 

犹若任何一种,任何想法如何纳入椭圆形的风格这是为了避免所有这些代码重复请让我知道。谢谢 。

回答

2

我认为你需要多结合:

<Page.Resources> 
    <WPFSampleExplorer:MyDiceInputToVisualConverter x:Key="MyDiceInputToVisualConverter" /> 
    <Style TargetType="{x:Type Ellipse}"> 
     <Setter Property="Visibility"> 
      <Setter.Value> 
       <MultiBinding Converter="{StaticResource MyDiceInputToVisualConverter}"> 
        <Binding RelativeSource="{RelativeSource Self}" Path="Tag"/> 
        <Binding /> 
       </MultiBinding> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Page.Resources> 

<Page.DataContext> 
    <Samples:DiceViewModel/> 
</Page.DataContext> 

<Canvas> 
    <Ellipse Tag="1" Canvas.Left="5" Canvas.Top="5" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="2" Canvas.Left="5" Canvas.Top="20" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="3" Canvas.Left="5" Canvas.Top="35" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="4" Canvas.Left="20" Canvas.Top="20" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="5" Canvas.Left="35" Canvas.Top="5" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="6" Canvas.Left="35" Canvas.Top="20" Width="20" Height="20" Fill="Yellow"></Ellipse> 
    <Ellipse Tag="7" Canvas.Left="35" Canvas.Top="35" Width="20" Height="20" Fill="Yellow"></Ellipse> 
</Canvas> 

public class DiceViewModel 
{ 
    // properties here 
} 

public class MyDiceInputToVisualConverter : IMultiValueConverter 
{ 
    #region Implementation of IMultiValueConverter 

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     Debug.WriteLine(values[0]); // This outputs 1,2,3,..7 
     Debug.WriteLine(values[1]); // This is your DiceViewModel 

     return Visibility.Visible; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
+0

谢谢 我是新来的这没有找出引用标签属性的语法。 你会使用像iv'e完成的标签属性,或者你能想出更好的方法来存储该值吗? – 2012-03-07 18:40:04

+0

我即将出门。发布您的问题。有人会帮忙。 – Phil 2012-03-07 18:43:16

+0

在Google中输入'drag and drop wpf'。你会发现很多例子。 – Phil 2012-03-07 21:52:31

0

如果您省略ConverterParameter,您的Converter将收到完整的对象(椭圆)。然后把你的价值转换成椭圆形并得到你的标签。

+0

它将接收它的参数? – 2012-03-07 13:40:40

+0

nope,作为“值” – NestorArturo 2012-03-07 15:59:42

+0

不,给予构造函数的值将是我的DataSource中绑定到Canvas的 属性Dice1的值 – 2012-03-07 16:07:43

相关问题