2010-03-13 5 views
12

XAML’de yeniyim, bu yüzden basit bir şeyi kaçırdığımı varsayalım.WPF XAML'de önceden tanımlanmış yolları kullanabilmem için 2 sabitlemeyi nasıl birleştirebilirim?

<Image Source="/Images/Themes/Buttons/MyPicture.png" /> 

ve başka bir sınıfta benim sabit tanımlamış::

public static readonly string UriImagesButtons = "/Images/Big/PNG/"; 

I, örneğin ben var, daha kolay yolu yönetimi için AC# sabiti ile kaynak yolunun yolunun bir bölümünü değiştirmek istiyor Bu gerek görüldüğü takdirde bir darbede küresel yolunu değiştirmek anlamına gelir

<Image Source="{static:UriImagesButtons + MyPicture.png}" /> 

: çizgisinde bir şey yapmak istiyorum. Bunu yapmak için sözdizimi nedir?

cevap

2

Yolu değiştirmek, bir veri bağlamanız yapmanız gerektiği anlamına geliyor ... Peki, neden C# sınıfınıza tam dosya yolunu kaydedip ona bağlamıyorsunuz?

Bu iş parçacığı üzerinde tartışma bakmak gerekir
+0

Sayısız görüntüüm olduğu için bu rotadan aşağıya inmek istemedim ve bu, yönetimin sadeliğini ortadan kaldıran her biri için bir sabite ihtiyaç duyduğum anlamına gelirdi. – Philip

2

: string manipulation in xaml attribute

Temel olarak, 2 parametre alır ve bunları birleştirir kendi biçimlendirme uzantısı oluşturabilirsiniz. Bu özel örnek, aynı zamanda bağlanma için de kullanılır. Tanımladığınız kök yoluna veya başka bazı verilere nerede sahip olabileceğinizi düşündüğümden şüpheliyim.

+0

Tamam, mantıklı. Bir uygulamada kapsamlı olarak kullanılıyorsa, bu gözle görülür bir performans isabetine sahip olacak mı? – Philip

+0

Hmm, bilmiyorum. Sanırım "geniş" olana bağlı. –

17

Bunu yapmanın en kolay yolu, bir StringFormat ile MultiBinding ile geçerli:

<Path> 
    <Path.Source> 
     <MultiBinding StringFormat="{}{0}{1}"> 
      <Binding Mode="OneTime" Source="{x:Static lcl:ConstantOwner.UriImagesButtons}" /> 
      <Binding Mode="OneTime" Source="MyPicture.png" /> 
     </MultiBinding> 
    </Path.Source> 
</Path> 

StringFormat parametresinde, bir "{}" böylece XAML çözümleyici Yanına ilk küme ayracı kaçmak zorunda' Bir biçimlendirme uzantısı olduğunu düşünmüyorum.

+0

Temiz bir çözüm. Bunların hepsi hakkında beni şaşırtan şey, eski okuldaki VB'de, sadece bir sabit tanımlayabiliyorsunuz, sonra derleyici, dize uyumu gördüğünde derleme zamanında ekleyecekti. Basit, kod yönetimi uygulamak için iyi ve hızlıdır. Gerçekten XAML'de bunu yapmak için basit bir yol gibi görünmüyor muyum? Herkes XAML'deki tüm yollarını kodluyor mu veya şu ana kadarki (mükemmel) yanıtlarda diğer yöntemlerden birini kullanıyor mu? Bana göre yönetilebilmede büyük bir sıçrama gibi görünüyor ...? – Philip

+0

+1. Güzel. Yeni şeyler yazılmasını gerektirmek yerine mevcut şeyleri kullanan çözümleri severim. –

+0

@Philip, kodunuzun arkasında (VB'nin C# si olabilir), çözümümdeki sabit dizeyi tanımlarsınız. MultiBinding, dizeleri birleştirmek için en kolay yerleşik yoldur. –

İlgili konular