Сеттер для чтения Canvas.Left и Canvas.Top в WPF, но не в Silverlight 4, почему? - PullRequest
1 голос
/ 28 апреля 2010

У меня есть следующий XAML, который отлично работает в WPF, но не в Silverlight 4

       <ItemsPanelTemplate x:Key="ContentListBoxItemsPanelTemplate">
            <Canvas/>
        </ItemsPanelTemplate>

        <DataTemplate x:Key="ContentListBoxItemTemplate">
            <Border CornerRadius="15" Width="150" Margin="3" Height="300">
                <Border.Background>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                        <GradientStop Color="OrangeRed" Offset="1" />
                        <GradientStop Color="Brown" Offset="0" />
                    </LinearGradientBrush>
                </Border.Background>
            </Border>
        </DataTemplate>

        <Style TargetType="ListBoxItem">
            <Setter Property="Canvas.Left" Value="{Binding Left}"/>
            <Setter Property="Canvas.Top" Value="{Binding Top}"/>
        </Style>

А потом где-то:

 <ListBox Name="ContentList" 
          ItemTemplate="{StaticResource ContentListBoxItemTemplate}"
          ItemsPanel="{StaticResource ContentListBoxItemsPanelTemplate}" />

Если я пытаюсь сделать то же самое в Silverlight, я получаю исключение, в котором говорится, что установщик не может установить свойство только для чтения, но я все еще хочу добиться того же в Silverlight без кода.

Есть предложения?

1 Ответ

3 голосов
/ 28 апреля 2010

Silverlight не поддерживает привязки в значении сеттера. У Дэвида Энсона есть отличное решение: http://blogs.msdn.com/delay/archive/2009/05/07/one-more-platform-difference-more-or-less-tamed-settervaluebindinghelper-makes-silverlight-setters-better.aspx

...