Uygulamamdaki farklı öğelere başvuran çok sayıda TextBlock var. Kodum doğrudan sayfada kullanıldığında iyi çalışıyor. Bununla birlikte, kodun çoğaltılmasını azaltmak için bir ControlTemplate ve bir ContentControl oluşturmak istiyorum.ControlTemplate içinde bir ElementName bağını nasıl kullanabilirim?
TemplateBinding kullanarak ContentControl'den ControlTemplate'e bir ElementName öğesine nasıl başvuruda bulunabilirim? Ayrıca işe yaramadı
"Cannot convert the value in attribute 'ElementName' to object of type 'System.String'. Object of type 'System.Windows.TemplateBindingExpression' cannot be converted to type 'System.String'. "
Etiket özelliğine ek olarak, ben denedim ContentStringFormat: Aşağıdaki kod bu hatayı atar.
Şablonları kullanarak çalışmaya başlamak için doğru yöntem nedir? Yardımlarınız için şimdiden
sayesinde
--- Shawn İşte
kodu bir örnektir:<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Page.Resources>
<ControlTemplate x:Key="MyTemplate" TargetType="{x:Type ContentControl}">
<TextBlock Margin="{Binding ElementName={TemplateBinding Tag}, Path=Margin}" Text="{TemplateBinding Content}" TextAlignment="{Binding ElementName={TemplateBinding Tag}, Path=TextAlignment}" Width="{Binding ElementName={TemplateBinding Tag}, Path=Width}" />
</ControlTemplate>
</Page.Resources>
<StackPanel>
<TextBlock x:Name="AnotherElement" Margin="10" Text="Main TextBlock" TextAlignment="Center" Width="100" />
<TextBlock x:Name="AnotherElement2" Margin="20" Text="Second TextBlock" TextAlignment="Left" Width="250" />
<TextBlock Margin="{Binding ElementName=AnotherElement, Path=Margin}" Text="Here is my TextBlock!" TextAlignment="{Binding ElementName=AnotherElement, Path=TextAlignment}" TextTrimming="CharacterEllipsis" Width="{Binding ElementName=AnotherElement, Path=Width}" />
<TextBlock Margin="{Binding ElementName=AnotherElement2, Path=Margin}" Text="Here is my Second TextBlock!" TextAlignment="{Binding ElementName=AnotherElement2, Path=TextAlignment}" TextTrimming="CharacterEllipsis" Width="{Binding ElementName=AnotherElement2, Path=Width}" />
<ContentControl Content="Hello!" Tag="AnotherElement" Template="{StaticResource MyTemplate}" />
<ContentControl Content="Hello Again!" Tag="AnotherElement2" Template="{StaticResource MyTemplate}" />
</StackPanel>
</Page>
Neden stil oluşturmuyor ve bunları bu stile gereksinim duyan tüm denetimlere uygulamıyorsunuz? Neden bazı özellikleri bir kontrolde tanımlamak ve diğer kontrolleri ona bağlamak istersiniz? Bu en iyi ihtimalle garip geliyor. Tag özelliğinde –
@Brent Depolama Bilgileri, MS Access form geliştirme ile bir tekniktir. Kontrolünüzde bazı özellik/işleyicilere bağlı bir VBA işlevine bazı sabit kodlanmış değerleri iletmek ucuz ve kötü bir yoldu. WPF'de buna ihtiyacımız yok çünkü elimizdeki daha geniş bir araç yelpazemiz var =) – failedprogramming
@BrentStewart Bu uygulamanın sonucunu MVVM, Bindings, DataTemplates, vb. Kullanarak sütunlarda görüntülemekteyim. Örneğimi özellikle ölçeklendirdim Bu siteyi sormak için. Grid kullanmamayı tercih ettim ve bunun yerine bir WrapPanel kullanıyorum çünkü kullanımı daha kolay ve temiz olduğunu hissettim. Bir TextBlock'un bir çok özelliğini bir diğerine bağlıyorum çünkü sütun başlığımın kendi özel başlığı için belirttiğim özellikleri (kenar boşluğu, genişlik, hizalama, vb.) Kopyalamasını istiyorum. Her bir metin bloğu için farklı bir öğe adına başvurduğunda bu stili nasıl uygularsınız? Bunun bir denetim şablonunun iyi bir yolu olmadığını belirtmek için –