Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1725
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Databind RenderTransform масштабирование в Silverlight 2 бета 2
Кто-нибудь знает, можно ли привязать к базе данных ScaleX и ScaleY преобразования рендеринга в Silverlight 2 Beta 2? Преобразование привязки возможно в WPF - но я получаю ошибку при настройке моей привязки в Silverlight через XAML. Возможно, это можно сделать с помощью кода?
<Image Height="60" HorizontalAlignment="Right"
Margin="0,122,11,0" VerticalAlignment="Top" Width="60"
Source="Images/Fish128x128.png" Stretch="Fill"
RenderTransformOrigin="0.5,0.5" x:Name="fishImage">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
</Image>
Я хочу связать ScaleX и ScaleY элемента ScaleTransform.
Я получаю ошибку времени выполнения при попытке привязки к двойному свойству в контексте данных:
Message="AG_E_PARSER_BAD_PROPERTY_VALUE [Line: 1570 Position: 108]"
Моя привязка выглядит так:
<ScaleTransform ScaleX="{Binding Path=SelectedDive.Visibility}"
ScaleY="{Binding Path=SelectedDive.Visibility}"/>
Я трижды проверил, что путь привязки правильный - я привязываю slidebar к тому же значению, и это работает просто отлично...
Видимость имеет тип double и представляет собой число между 0.0 и 30.0. У меня есть конвертер значений, который масштабирует это число до 0.5 и 1 - я хочу масштабировать размер рыбы в зависимости от чистоты воды. Поэтому я не думаю, что это проблема с типом, с которым я связываюсь...
Это ошибка времени выполнения или компиляции, Джонас? Глядя на документацию, ScaleX и ScaleY являются свойствами зависимостей, поэтому вы должны уметь писать
<ScaleTransform ScaleX="{Binding Foo}" ScaleY="{Binding Bar}" />
... где Foo и Bar имеют соответствующий тип.
Edit: конечно, это документация WPF. Я полагаю, что вполне возможно, что они изменили ScaleX и ScaleY на стандартные свойства, а не на свойства зависимостей в Silverlight. Я бы хотел услышать больше об ошибке, которую вы видите.
ScaleTransform не имеет контекста данных, поэтому, скорее всего, привязка ищет SelectedDive.Visibility вне себя и не находит его. В Silverlight xaml и привязке данных есть много такого, что отличается от WPF...
В любом случае, чтобы решить эту проблему, вам нужно будет настроить привязку в code**, или вручную прослушать событие PropertyChanged вашего объекта данных и установить масштаб в коде позади.
Я бы выбрал последнее,если бы вы хотели сделать анимацию / раскадровку для изменения масштаба.
** мне нужно проверить, но вы, возможно, не сможете привязаться к нему. насколько я помню, если RenderTransform не является частью анимации, она превращается в матричное преобразование, и все ставки отменяются.
Ах, я думаю, что понимаю вашу проблему. Вы пытаетесь привязать свойство типа Visibility (SelectedDive.Visibility) к свойству типа Double (ScaleTransform.ScaleX). WPF/Silverlight не может конвертировать между этими двумя типами.
Чего вы пытаетесь достичь? Может быть, я смогу помочь вам с XAML. Что такое "SelectedDive" и что вы хотите сделать, когда его видимость изменится?
Извините - искал ответ, чтобы увеличить количество ответов, поэтому я не понял, что вы отредактировали вопрос с дополнительной информацией.
OK, поэтому видимость имеет тип Double, поэтому привязка должна работать в этом отношении.
В качестве обходного пути, не могли бы вы попробовать привязать свои значения ScaleX и ScaleY непосредственно к элементу управления слайдера, к которому привязан SelectedDive.Visibility? Что-то вроде:
<ScaleTransform ScaleX="{Binding ElementName=slider1,Path=Value}" ... />
Если это сработает, то это, по крайней мере, заставит вас двигаться.
Edit: Ах, я только что вспомнил, что однажды прочитал, что Silverlight не поддерживает синтаксис ElementName в привязках, так что это может не сработать.
Да, возможно, встроенные преобразования визуализации не наследуют DataContext от объекта, к которому они применяются. Можете ли вы заставить DataContext войти в них? Например, дайте преобразованию имя:
<ScaleTransform x:Name="myScaler" ... />
... а потом в вашем коде-за спиной:
myScaler.DataContext = fishImage.DataContext;
... так что скалер определенно делится своим DataContext с изображением.
Я надеялся решить эту проблему через XAML,но оказалось, что предложение Брайана было правильным. Я использовал предложение Мэтта, чтобы дать преобразованию масштаба имя, чтобы я мог получить доступ к нему из кода. Затем я подключил событие изменения значения ползунка и вручную обновил свойство ScaleX и ScaleY. Я сохранил свой конвертер значений для преобразования из диапазона видимости (0-30m) в масштаб (0.5 в 1). Код выглядит примерно так:
private ScaleConverter converter;
public DiveLog()
{
InitializeComponent();
converter = new ScaleConverter();
visibilitySlider.ValueChanged += new
RoutedPropertyChangedEventHandler<double>(visibilitySlider_ValueChanged);
}
private void visibilitySlider_ValueChanged(object sender,
RoutedPropertyChangedEventArgs<double> e)
{
fishScale.ScaleX = (double)converter.Convert(e.NewValue,
typeof(double), null, CultureInfo.CurrentCulture);
fishScale.ScaleY = fishScale.ScaleX;
}