2016-03-31 11 views
1

'de anahatlı bir textBlock (veya başka bir denetim) nasıl yerleştirilir? Javier G'nin önerdiği çözümle bir çekicilik gibi çalışıyorum bu outlined textBlock kullanıyorum. Onu bir kütüphaneye koydum, şimdi HelperLib: OutlinedTextBlock.
Şimdi onu bir TextBox içine koymak istiyorum.Metin Kutusu

yüzden denedim budur:

  • bir TextBlock bir çocuk olarak OutlinedTextBox koyun ama bir çocuk olarak bunu kabul etmiyor çünkü bu işe yaramadı.
  • bir RichTextBox ve FlowDocument içindeki put kullanın ama bir çalışma zamanı hatası
    • kullanın yine bir şablon ama Runtime hatası var beri bir sorun oluştu. outlinedTextBox koyarak gerçeği çok tuhaf Bunun bir metin kutusu içindeki anyother kontrolü koyarak olarak yeniden düşünülmelidir düşünüyorum yaparsa

.

Ben çözüm yakın olduğunu düşünüyorum ama nedense hala beni kaçar ... --EDIT-- ben hiç karşılaşmadım bir additiona sorun var: benim kontrolü adında var otbQuery ama göstermiyor Kodda yukarı! Niye ya???

<TextBox Name="tbxQuery" VerticalAlignment="Center" Grid.Column="3" Width="200" Background="Transparent" CaretBrush="White" HorizontalAlignment="Center" Foreground="White" TextChanged="TextBox_TextChanged" BorderBrush="Gainsboro" BorderThickness="3"> 
    <TextBox.Template> 
     <ControlTemplate> 
      <Border BorderBrush="Gainsboro" BorderThickness="3"> 
      <Grid> 
     -----> <HelperLib:OutlinedTextBlock Name="otbQuery" Margin="1" Fill ="White" Stroke="Red" Text="{Binding Path=Content, ElementName=cp, Mode=OneWay}" VerticalAlignment="Center"/> 
       <ContentPresenter x:Name="cp" Content="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" TextBlock.Foreground="Transparent"/> 
       </Grid> 
      </Border> 
     </ControlTemplate> 
    </TextBox.Template>    
</TextBox> 

Burada hatayı görebilir ve hiçbir geçerli hızlı düzeltme

enter image description here

+0

Uh ?? Ne oldu, çözümlenen mesaj neden silindi? İyi geliyordu ama yine de test edemedi: -o – Luca

+0

Onu sildiğim ve bir ViewModel'den veriyi ona bağlayabildiğinden, TextBox'a gerçekten yazamadığınız için onu sildim. Çok kullanışlı bir TextBox değil. – Stewbob

+0

Teşekkürler aynı ... başka çözüm yok mu? Bağlamak zorunda değilim ama evet yazmalıyım .... – Luca

cevap

1

Bunu gerçekleştirmek amacıyla TextBox kontrolün ControlTemplate geçersiz kılmak gerekir önerilmiştir. Aşağıda, TexBlock'un Text özelliğine TextBox.Text özelliği bağlı olan basit bir örnek verilmiştir. Ben ControlTemplate iç standart TextBlock koyduk

 <TextBox> 
      <TextBox.Template> 
       <ControlTemplate> 
        <Border BorderBrush="Black" 
         BorderThickness="1"> 
         <Grid> 
          <TextBlock Margin="1" 
             Foreground="Red" 
             Text="{Binding Path=Content, ElementName=cp, Mode=OneWay}"/> 
          <ContentPresenter x:Name="cp" 
              Content="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" 
                   TextBlock.Foreground="Transparent"/> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </TextBox.Template> 
     </TextBox> 

olarak, özel TextBlock kontrolünü koyardı.

DÜZENLEME

yukarıdaki çözüm çalışır, ancak ciddi bir kludge bu. Temel olarak, TextBlock'un üstüne şeffaf bir ContentPresenter koyar. TextBlock, metni istediğiniz gibi görüntüler ve ContentPresenter, TextBox yazmanıza izin verir.

Halen var olan bir sorun, imleç çubuğunun tıklatıldığında veya TextBox yazarak görünmemesidir. Sorunun, TextBox şablonuna yapılan bazı stillerle üstesinden gelebileceğinden şüpheleniyorum.

+0

Çözümünüz harika! Ve bunu çözeceğine işaret edeceğim ama ek bir çaba harcayabilseydin minnettar olurum. İmlecin ortaya çıkmaması, tamamen işe yaramaz hale getirir. Programımda sayısız yerde kullanmam gerekiyor ve sorunu kendim çözemiyorum. .... Teşekkürler – Luca

+0

Lütfen benim düzenleyin thanx 2 – Luca