2013-04-27 16 views
5

Ben görüntüleriyle ilgili düğmesi için bir ResourceDictionary bir stil tanımlı:WPF UserControls: Görüntü bile kaybolur 'x: Paylaşılan = 'Yanlış''

görüntü kaynağı başka ResourceDictionary tanımlanır
<Style x:Key="BotonIrAInicioStyle" TargetType="Button"> 
    <Setter Property="Margin" Value="0"/> 
    <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"/> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <Image Margin="2" Source="{StaticResource IconoDashboardBlanco}" MaxHeight="20" Stretch="Uniform" 
        RenderOptions.BitmapScalingMode="HighQuality"/> 
     </Setter.Value> 
    </Setter> 
</Style> 

aynı montaj ve x:Shared="False" olarak işaretlenmiş:

<BitmapImage x:Key="IconoDashboardBlanco" x:Shared="False" 
UriSource="pack://application:,,,/QualityFramework;component/Images/dashboard64X64.png"/> 

tarzı farklı bir derlemede kullanılacak beri, görüntünün yerini belirtmek için "pack://application:,,," gösterimi kullanılır. Görüntü için Build Action, Resource (Do not copy to output directory) olarak ayarlanmıştır.

<Button DockPanel.Dock="Left" Style="{StaticResource BotonIrAInicioStyle}" Click="BotonIrAInicio_Click"/> (Click event has nothing to do with the problem) 

SORUN: Ben görüntü ve görüntü ile düğmeye içeren UserControl A açmak

Tamam görüntülenir ana montajda

Ben aynı tarzı ile bir düğme görüntülenir iki UserControls var . Daha sonra aynı butonu içeren UserControl B'u açıyorum, resim tamam. UserControl A'u tekrar açıyorum ve görüntü kayboldu. UserControl B'u ve ardından UserControl A'u açarsam, sonuncusu görüntüye "sahip olur" olur.

Her yere gittim ve tüm çözümler x:Shared="False", URI notation ve Build Action ... 'a işaret ettim ... Hepsini uyguladık ve sorun hala devam ediyor. Ayrıca hiç temizlik yapmadan temizlik yapmayı ve yeniden inşa etmeyi denedim.

Neyi eksik? Teşekkürler!

PS: Ben görüntüye hem düğmelerinin içeriği ayarlarsanız doğrudan Tamam çalışır, ancak stil bütün mesele tam olarak bu kaçınmaktır!

cevap

10

sorun düğmeye setter İçeriğin BitmapImage değil - bir kez oluşturulan ve dolayısıyla örnekleri arasında "atlamak" zorundadır oluyor.

kolay değil WPF-isque, çözüm tarzına x:Shared="False" ayarlıyor.

doğru şekilde ControlTemplate veya DataTemplate kullanmaktır. senin gözlemlerden

:

"Ben görüntüye hem düğmelerinin içeriği ayarlarsanız doğrudan ok çalışır" - Eğer Image nesnenin iki farklı örneğini oluşturmak bunu yapmak çünkü bu.

Ancak, bu: "tüm stil noktasından kaçınmaktır!" bir yanlış anlamadır - stiller içerik kontrollerinin içeriğini ayarlamak için tasarlanmamıştır, içerik içeriğe bağlıdır. Tüm düğmeler için yinelenen bir görseliniz varsa (içeriğe bağımlı olmadan), bu düğme için ControlTemplate'da bulunmalıdır. İçeriğe bağlı bir görseliniz varsa (ancak içerik görsel değildir), DataTemplate'da bulunmalıdır.

+0

Çözüm gönderdiğiniz için teşekkür ederiz, yorumlarınızda kesinlikle haklısınız. – Hannish