#c# #silverlight #windows-phone-8
#c# #silverlight #windows-phone-8
Вопрос:
Кто-нибудь знает, почему привязка не работает для свойства DecodePixelWidth? Когда я устанавливаю его через xml — все работает нормально — я вижу масштабированное изображение. Когда я использую привязку для этого — изображение не масштабируется.
<Image VerticalAlignment="Top" Width="2292" Stretch="None">
<Image.Source>
<BitmapImage UriSource="{Binding Src}" DecodePixelWidth="{Binding DecodePixelWidth}" />
</Image.Source>
</Image>
public int DecodePixelWidth
{
get
{
return _decodePixelWidth;
}
set
{
if (value != _decodePixelWidth)
{
_decodePixelWidth = value;
NotifyPropertyChanged("DecodePixelWidth");
}
}
}
Спасибо!
Ответ №1:
У меня была такая же проблема, и я нашел это решение http://diegoparolin-codeplus.blogspot.it/2014/09/set-decodepixelheight-property-binding.html что это работает для меня.
В моем приложении MVVM WPF я хочу изменить размер растрового изображения с помощью значений, хранящихся в app.config. Поэтому для этого я попытался привязать изображение.Свойство высоты и растровое изображение.DecodePixelHeight непосредственно в мою ViewModel, например, таким образом:
В app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="DocumentsToBeFiledImageHeight" value="240"/>
<add key="DocumentsToBeFiledImageDecodePixelHeight" value="240"/>
</appSettings>
</configuration>
Затем в моей ViewModel я добавил эти свойства
private int _documentsToBeFiledImageDecodePixelHeight;
public int DocumentsToBeFiledImageDecodePixelHeight
{
get { return _documentsToBeFiledImageDecodePixelHeight; }
set
{
if (value != _documentsToBeFiledImageDecodePixelHeight)
{
_documentsToBeFiledImageDecodePixelHeight = value;
RaisePropertyChanged(DocumentsToBeFiledImageDecodePixelHeightPropertyName);
}
}
}
private double _documentsToBeFiledImageHeight;
public double DocumentsToBeFiledImageHeight
{
get { return _documentsToBeFiledImageHeight; }
set
{
if (value != _documentsToBeFiledImageHeight)
{
_documentsToBeFiledImageHeight = value;
RaisePropertyChanged(DocumentsToBeFiledImageHeightPropertyName);
}
}
}
и этот код
DocumentsToBeFiledImageHeight = Преобразовать.ToDouble(ConfigurationManager.AppSettings[«DocumentsToBeFiledImageHeight»]);
DocumentsToBeFiledImageDecodePixelHeight = Преобразовать.ToInt32(ConfigurationManager.AppSettings[«DocumentsToBeFiledImageDecodePixelHeight»]);
Затем в XAML я добавил этот код
<Image Grid.Row="0" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.DocumentsToBeFiledImageHeight, UpdateSourceTrigger=PropertyChanged}">
<Image.Source>
<BitmapImage DecodePixelHeight="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.DocumentsToBeFiledImageDecodePixelHeight, UpdateSourceTrigger=PropertyChanged}"
UriSource="{Binding Path=FullName}" />
</Image.Source>
</Image>
К сожалению, это не работает, кажется, что свойство DecodePixelHeight установлено неправильно.
Поэтому я попытался восстановить значение непосредственно из app.config. Я добавил эти параметры в раздел пользовательских настроек в моем файле app.config
<userSettings>
<Agest.AO.Client.Properties.Settings>
<setting name="DocumentsToBeFiledImageDecodePixelHeight" serializeAs="String">
<value>240</value>
</setting>
<setting name="DocumentsToBeFiledImageHeight" serializeAs="String">
<value>240</value>
</setting>
</Agest.AO.Client.Properties.Settings>
</userSettings>
и я изменил код XAML таким образом
xmlns:localme="clr-namespace:Agest.AO.Client.Properties"
<Image Grid.Row="0" Height="{Binding Source={x:Static localme:Settings.Default}, Path=DocumentsToBeFiledImageHeight, Mode=OneWay}">
<Image.Source>
<BitmapImage DecodePixelHeight="{Binding Source={x:Static localme:Settings.Default}, Path=DocumentsToBeFiledImageDecodePixelHeight, Mode=OneWay}"
UriSource="{Binding Path=FullName}" />
</Image.Source>
</Image>
Теперь это работает, и я могу устанавливать значения непосредственно в файле конфигурации.
С уважением!