Свойство привязки и DecodePixelWidth

#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>
 

Теперь это работает, и я могу устанавливать значения непосредственно в файле конфигурации.

С уважением!