Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# silverlight 2将数据绑定到转换?_C#_Silverlight_Binding_Silverlight 2.0 - Fatal编程技术网

C# silverlight 2将数据绑定到转换?

C# silverlight 2将数据绑定到转换?,c#,silverlight,binding,silverlight-2.0,C#,Silverlight,Binding,Silverlight 2.0,我正在Silverlight2中创建标记云,并尝试将列表集合中的数据绑定到文本块上的缩放变换。当运行此命令时,我得到一个AG\u E\u解析器\u BAD\u属性\u值错误。是否可以在Silverlight 2中将值绑定到转换?如果不是的话,我可以做一些类似FontSize={Binding Weight*18}的事情,将标签的权重乘以基本字体大小吗?我知道这不起作用,但计算DataTemplate中项的属性值的最佳方法是什么 <DataTemplate> <TextBlock

我正在Silverlight2中创建标记云,并尝试将列表集合中的数据绑定到文本块上的缩放变换。当运行此命令时,我得到一个
AG\u E\u解析器\u BAD\u属性\u值
错误。是否可以在Silverlight 2中将值绑定到转换?如果不是的话,我可以做一些类似FontSize={Binding Weight*18}的事情,将标签的权重乘以基本字体大小吗?我知道这不起作用,但计算DataTemplate中项的属性值的最佳方法是什么

<DataTemplate>
<TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextWrapping="Wrap" d:IsStaticText="False" Text="{Binding Path=Text}" Foreground="#FF1151A8" FontSize="18" UseLayoutRounding="False" Margin="4,4,4,4" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform>
    <TransformGroup>
        <ScaleTransform ScaleX="{Binding Path=WeightPlusOne}" ScaleY="{Binding Path=WeightPlusOne}"/>
    </TransformGroup>
</TextBlock.RenderTransform>

问题似乎是:

数据绑定的目标必须是FrameworkElement

因此,因为ScaleTransform不是框架元素,所以它不支持绑定。我尝试绑定到SolidColorBrush来测试这一点,得到了与ScaleTransform相同的错误

因此,为了解决这个问题,您可以创建一个控件来公开标记数据类型的依赖属性。然后有一个property changed事件,该事件将标记数据的属性绑定到控件中的属性(其中之一是缩放变换)。这是我用来测试的代码

项目控制:

<ItemsControl x:Name="items">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
       <local:TagControl TagData="{Binding}" />
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

仅仅设置一个属性似乎有些过分,但我找不到更简单的方法

这是我在Silverlight3中期待的事情之一。
<UserControl x:Class="SilverlightTesting.TagControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    >
    <TextBlock x:Name="text" TextWrapping="Wrap" FontSize="18" Margin="4,4,4,4">
      <TextBlock.RenderTransform>
          <ScaleTransform x:Name="scaleTx" />
      </TextBlock.RenderTransform>
    </TextBlock>
</UserControl>
public partial class TagControl : UserControl
{
    public TagControl()
    {
        InitializeComponent();
    }

    public Tag TagData
    {
        get { return (Tag)GetValue(TagDataProperty); }
        set { SetValue(TagDataProperty, value); }
    }

    // Using a DependencyProperty as the backing store for TagData.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TagDataProperty =
        DependencyProperty.Register("TagData", typeof(Tag), typeof(TagControl), new PropertyMetadata(new PropertyChangedCallback(TagControl.OnTagDataPropertyChanged)));

    public static void OnTagDataPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        var tc = obj as TagControl;
        if (tc != null) tc.UpdateTagData();
    }

    public void UpdateTagData()
    {
        text.Text = TagData.Title;
        scaleTx.ScaleX = scaleTx.ScaleY = TagData.Weight;
        this.InvalidateMeasure();
    }

}