|
ColorAnimation меняет сам источник {Binding ... Mode=OneWay}, а не целевое свойство
|
|||
---|---|---|---|
#18+
Ребята, у меня такая проблема: условно говоря, у меня есть Border (B1), Background которого привязан с помошью Binding к свойству Background другого Border`a (B2), который оформлен в виде статического поля. Свойство привязки Mode=OneWay, следовательно меняя Background исходного Border`a (B1), значение источника привязки (B2.Background) меняться не должно. При явном изменении B1.Background.Color в коде так все и происходит, однако если анимировать это свойство с помошью ColorAnimation начинает меняться и свойство B2.Background.Color, в результате чего происходит нежелательное изменение цвета и других элементов, привязанных к этому же источнику B2. Подскажите пожалуйста, как выйти из этой ситуации, чтобы при анимации менялся только B1.Background.Color, не трогая значение свойства источника, к которому он прявязан. <Window x:Class="WpfApplication1.MainWindow" xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication1" Title="MainWindow" Height="350" Width="525"> <StackPanel> <Border Height="50" Name="Brd" Background="{Binding Source={x:Static local:MainWindow.B}, Path=Background}"> <Border.Triggers> <EventTrigger RoutedEvent="MouseLeftButtonUp"> <BeginStoryboard> <Storyboard> <ColorAnimation To="Yellow" Duration="0:0:2" Storyboard.TargetProperty="Background.Color"></ColorAnimation> </Storyboard> </BeginStoryboard> </EventTrigger> </Border.Triggers> </Border> <Button Click="Button_Click">Показать значение цвета источника</Button> </StackPanel> </Window> namespace WpfApplication1 { public partial class MainWindow : Window { public static Border B = new Border { Background = new SolidColorBrush(Colors.Red) }; public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { MessageBox.Show((B.Background as SolidColorBrush).Color.ToString()); } } } Я думал перед началом анимации в коде явно задавать значение анимируемого свойства, а после окончания анимации снова очищать это значение через DependencyObject.ClearValue() и воззданавливать установку значения на основе привязки, однако такой подход вовсе не рационален, наверняка есть решение проще. Заранее спасибо, решение, демонстрирующее данную проблемы прилагаю ниже. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2013, 11:05 |
|
ColorAnimation меняет сам источник {Binding ... Mode=OneWay}, а не целевое свойство
|
|||
---|---|---|---|
#18+
Такое произошло, по той причине, что у вас оба Border'a через свойство Background ссылаются на один и тот же обьект SolidBrush, который вы создаете code behind. У этого обьекта есть Dependency Property: SolidBrush.ColorProperty Вы его и анимируете, в связи с этим, оба инстанса Border, ссылающихся на этот SolidBrush, реагируют на это. Если бы вы прибиндили только ColorProperty, все было бы как вы того хотите. Вот пример исправленный. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2013, 16:46 |
|
ColorAnimation меняет сам источник {Binding ... Mode=OneWay}, а не целевое свойство
|
|||
---|---|---|---|
#18+
Lord BritishТакое произошло, по той причине, что у вас оба Border'a через свойство Background ссылаются на один и тот же обьект SolidBrush, который вы создаете code behind. У этого обьекта есть Dependency Property: SolidBrush.ColorProperty Вы его и анимируете, в связи с этим, оба инстанса Border, ссылающихся на этот SolidBrush, реагируют на это. Если бы вы прибиндили только ColorProperty, все было бы как вы того хотите. Вот пример исправленный. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Да, вы совершенно правы, спасибо! Но ведь если после анимации в коде поменять значение B2.Background.Color, Binding уже не срабатывает ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2013, 18:01 |
|
ColorAnimation меняет сам источник {Binding ... Mode=OneWay}, а не целевое свойство
|
|||
---|---|---|---|
#18+
WildRay Да, вы совершенно правы, спасибо! Но ведь если после анимации в коде поменять значение B2.Background.Color, Binding уже не срабатывает автор<ColorAnimation To="Yellow" Duration="0:0:2" Storyboard.TargetProperty="Background.Color" FillBehavior="Stop" ></ColorAnimation> ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2013, 18:12 |
|
ColorAnimation меняет сам источник {Binding ... Mode=OneWay}, а не целевое свойство
|
|||
---|---|---|---|
#18+
Lord BritishWildRayДа, вы совершенно правы, спасибо! Но ведь если после анимации в коде поменять значение B2.Background.Color, Binding уже не срабатывает автор<ColorAnimation To="Yellow" Duration="0:0:2" Storyboard.TargetProperty="Background.Color" FillBehavior="Stop" ></ColorAnimation> Да, но мне ведь нужно, например, на наведение мышью проанимировать до какого-то цвета и задержать его, а не сбрасывать и только после ухода мыши проанимировать обратно ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2013, 18:20 |
|
ColorAnimation меняет сам источник {Binding ... Mode=OneWay}, а не целевое свойство
|
|||
---|---|---|---|
#18+
Ура! Все все все, я придумал, нужно просто на первой аниамции FillBehavior не указывать, а при уводе мыши поставить на анимации FillBehavior="Stop"! Спасибо вам большущее! Без вас бы не справился! :* ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2013, 18:32 |
|
ColorAnimation меняет сам источник {Binding ... Mode=OneWay}, а не целевое свойство
|
|||
---|---|---|---|
#18+
WildRay, Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Можно и через VSM, правда не знаю Border знает об VSM. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2013, 19:28 |
|
ColorAnimation меняет сам источник {Binding ... Mode=OneWay}, а не целевое свойство
|
|||
---|---|---|---|
#18+
WildRayУра! Все все все, я придумал, нужно просто на первой аниамции FillBehavior не указывать, а при уводе мыши поставить на анимации FillBehavior="Stop"! Спасибо вам большущее! Без вас бы не справился! :* OK, у меня окно открытое осталось. Не обновил, думал что еще не решено. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2013, 19:30 |
|
|
start [/forum/topic.php?fid=21&fpage=33&tid=1441514]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 340ms |
total: | 473ms |
0 / 0 |