2014-06-06 2 views
0

Я создал TextBox над элементом Path (Элемент Path рисует прямоугольную вещь, которая действует как дизайн текстового поля). Теперь я хочу отключить этот TextBox с помощьюDisabled TextBox Style

valCon.ValueTextBox.IsEnabled = false; 

Это работает до сих пор. Однако, поскольку я не хочу, чтобы TextBox имел какой-либо стиль (без цвета, без границ и т. Д.), Но только видимый текст в нем, у меня возникает небольшая проблема:

Когда TextBox отключен , он автоматически получает стиль, от которого я не могу избавиться. Фон меняется на белый, прозрачность меняется примерно на 0,3 и появляются границы.

Я не могу показаться, чтобы решить эту проблему, добавив

valcon.ValueTextBox.Background = new SolidColorBrush(Colors.Transparent); 
valcon.ValueTextBox.BorderBrush = new SolidColorBrush(Colors.Transparent); 

и т.д.

Это только кажется, что это игнорировать. Кто-нибудь знает решение?

Приветствия Narakuvera

+0

ли вы определить стиль на 'TextBox' в XAML? Это не самая лучшая идея - установить эти значения в коде. Попробуйте изменить свой вид в XAML. – nakiya

+0

вы хотите отключить текстовое поле навсегда или вы хотите отключить его на каком-либо мероприятии? – Nitin

+0

@nakiya Нет, я не определял стиль TextBox в XAML, потому что элемент управления, в котором я использую TextBox, очень динамичен, а это значит, что мне нужно делать много вычислений и изменений в коде. – user3701907

ответ

0

Вы должны взять контроль над шаблоном для достижения того же

вот основной шаблон для вас без границ и без фона TextBox

<TextBox Text="hello"> 
     <TextBox.Template> 
      <ControlTemplate TargetType="TextBox"> 
       <ScrollViewer Margin="0" 
           x:Name="PART_ContentHost" /> 
      </ControlTemplate> 
     </TextBox.Template> 
    </TextBox> 

вы можете выберите IsEnabled="False", и он все равно останется без границ

Код за подход

 ControlTemplate ct = new ControlTemplate(typeof(TextBox)); 
     FrameworkElementFactory sv = new FrameworkElementFactory(typeof(ScrollViewer)); 
     sv.Name = "PART_ContentHost"; 
     ct.VisualTree = sv; 
     textbox1.Template = ct; 

WinRT код за подход

 string template = "<ControlTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" TargetType=\"TextBox\"><ScrollViewer Name=\"PART_ContentHost\" /></ControlTemplate>"; 
     ControlTemplate сt = (ControlTemplate)XamlReader.Load(template); 
     textbox1.Template = сt; 
+0

Благодарим вас за ответ. Однако я хочу добиться этого только в коде. В этом случае XAML не вариант для меня. Есть ли возможность достичь в коде, что вы только что сделали? – user3701907

+0

да, вы можете добиться того же кода, что и я, попробую преобразовать его в код. – pushpraj

+0

@ pushpraj Не работает с грустью. FrameworkElementFactory не существует, поэтому ControlTemplate.VisualTree. Кроме того, Windows.UI.Xaml.Controls.ControlTemplate не принимает никаких аргументов. Может быть, мы используем разные версии? В любом случае, я понимаю принцип, поэтому я мог бы воссоздать его в VS2013 для Win8.1. Большое спасибо! :) – user3701907

Смежные вопросы