Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Binding из ControlTemplate, не работает... 
V
    Опции темы
Человек01
Дата 14.3.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



В продолжение нарисовалсявопрос:
В ResourceDictionary, расположенном в TextBox.xaml, определяю стиль для public class ElTextBox : TextBox

Код

<Style x:Key="textbox001" TargetType="{x:Type evrika:ElTextBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type evrika:ElTextBox}">
                    <Border 
                        Name="Border"
                        CornerRadius="2" 
                        Padding="2"
                        Background="Blue"
                        BorderThickness="1" 
                        Tag="тага тага"
                        >
                        <ScrollViewer Tag="hhhhhellloo" Margin="0" x:Name="PART_ContentHost"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="TextBox.Text" Value="">
                            <Setter TargetName="PART_ContentHost" Property="Background">
                                <Setter.Value>
                                    <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left">
                                        <VisualBrush.Visual>
                                            <Label FontStyle="Italic">
                                                <Label.Content>
                                                    <Binding Path="Tag">
                                                        <Binding.RelativeSource>
 <!-- Вопрос ТУТ -->                              <RelativeSource Mode="FindAncestor" AncestorType="{x:Type evrika:ElTextBox}" />
                                                        </Binding.RelativeSource>
                                                    </Binding>
                                                </Label.Content>
                                            </Label>
                                        </VisualBrush.Visual>
                                    </VisualBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


В отдельном классе соответственно:
    
Код

public class ElTextBox : TextBox
    {
          public ElTextBox()
            : base()
         {
             this.Loaded += new RoutedEventHandler(ElTextBox_Loaded);
         }


         void ElTextBox_Loaded(object sender, RoutedEventArgs e)
        {
             Uri stUri = new Uri("/test01;component/TextBox.xaml", UriKind.RelativeOrAbsolute);
             ResourceDictionary rdic = (ResourceDictionary)Application.LoadComponent(stUri);
             this.Tag = "hello"; 
             this.Style = (Style)rdic["textbox001"];
        }
   }

Но не получается забиндить:
Цитата

Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='test01.ElTextBox', AncestorLevel='1''. BindingExpression:Path=Tag; DataItem=null; target element is 'Label' (Name=''); target property is 'Content' (type 'Object')


Что не так делаю? Вроде уже всё перепробовал...

причем вопрос кроется вот тут:
Код

<Binding Path="Tag">
         <Binding.RelativeSource>
                   <RelativeSource Mode="FindAncestor" AncestorType="{x:Type evrika:ElTextBox}" />
         </Binding.RelativeSource>
</Binding>

Если его убрать и поставить что нить типо Привет всё работает, собственно проблема в биндинге. И не могу понять что не так делаю...

Это сообщение отредактировал(а) Человек01 - 14.3.2009, 11:35
PM MAIL ICQ   Вверх
Partizan
Дата 14.3.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Человек01Модератор: Пожалуйста, один топик - один вопрос.

Добавлено через 4 минуты и 32 секунды
Человек01, в первой строке очепятка по-видимому?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Человек01
Дата 14.3.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



Partizan, По поводу модерирования: скопировать данный вопрос в отдельною тему(Просто изначально мне показалось что проблема связанна с тем что использую ResourceDictionary, но как видимо выходит, что нет)? 
Цитата

Человек01, в первой строке очепятка по-видимому? 

Если по поводу ExTextBox, то да везде используется ElTextBox

Это сообщение отредактировал(а) Человек01 - 14.3.2009, 11:38
PM MAIL ICQ   Вверх
Partizan
Дата 14.3.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Человек01,  могу сказать, что надо искать другие пути получения необходимого функционала...ибо в этом варианте биндинг не заработает, ибо Label не находится в Visual Tree текстбокса....и не будет


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Человек01
Дата 14.3.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



Ладно допусти Label не находится в Visual Tree текстбокса.
Тогда добавим в ElTextBox
Код

        public Brush zalivka
        {
            get { return Brushes.Red; }
            set { this.SetValue(zalivkaProperty, value); }
        }
        public static readonly DependencyProperty zalivkaProperty = DependencyProperty.Register(
                "zalivka", typeof(Brush), typeof(ElTextBox), new PropertyMetadata(null));


И заменим:
Код

<Setter TargetName="PART_ContentHost" Property="Background">
.....
</Setter>

На это:
Код

<Setter TargetName="PART_ContentHost" Property="Background" Value="{Binding Path=ElTextBox.zalivka}"/>


Но всё равно не работает, моя не понимать...
PM MAIL ICQ   Вверх
Partizan
Дата 14.3.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Человек01, о.О а вам Path у биндинга странноватым не кажется?

Добавлено через 1 минуту и 39 секунд
я к тому, что вроде бы как в качестве source должен получиться объект типа ElTextBox, а в Path должно быть только zalivka...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Человек01
Дата 14.3.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



Код

<Setter TargetName="PART_ContentHost" Property="Background">
    <Setter.Value>
        <Binding Path="zalivka">
           <Binding.RelativeSource>
              <RelativeSource Mode="FindAncestor" AncestorType="{x:Type evrika:ElTextBox}"/>
           </Binding.RelativeSource>
        </Binding>
    </Setter.Value>
</Setter>

Так правильнее?
P.S.:Дико извиняюсь если докучаю, но правда я что то вообще не могу понять почему я не могу доломиться до свойств ElTextBox к которому и применяю Style
PM MAIL ICQ   Вверх
Partizan
Дата 14.3.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Человек01

Код

                                <Setter.Value>
                                    <Binding Path="zalivka">
                                        <Binding.RelativeSource>
                                            <RelativeSource Mode="TemplatedParent"/>
                                        </Binding.RelativeSource>
                                    </Binding>
                                </Setter.Value>



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Человек01
Дата 14.3.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



Работает  smile 
Partizanогромнейшее спасибо, а я из пустого в порожнее переливал...  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0828 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.