2016-08-05 2 views
1

Я довольно новичок в C# wpf и имею проблему.WPF Скопированная кнопка Не стрелять

Я использовал ответ от this post, чтобы дублировать элемент управления сеткой. Элемент управления сеткой содержит кнопку. Похоже, что он продублирован правильно.

Когда нажата кнопка исходного элемента управления, обрабатывается событие клика, которое вызывает метод в коде окна.

Когда нажата копия кнопки управления, событие клика не запускается и метод не вызывается. Это меня сбивает с толку, поскольку я хочу, чтобы он назвал тот же метод.

Возможно, данные обработки событий не скопированы должным образом? Есть ли способ обойти это?

Как исходная сетка, так и скопированная сетка (содержащая кнопки) являются дочерними элементами другой сетки.

Edit:

Это XAML для сетки оригинальный, которая содержит кнопку:

<Grid Name="TempTab" DockPanel.Dock="Left" HorizontalAlignment="Left" Margin="5,5,5,0"> 
      <Rectangle Fill="Black" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stroke ="White" Margin="0,0,-2,0"> 
      </Rectangle> 
      <Grid> 
       <DockPanel LastChildFill="False"> 
        <TextBlock Foreground="White" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="3,0,3,3">Some Text</TextBlock> 
        <Button Width="50" BorderBrush="{x:Null}" Foreground="{x:Null}" BorderThickness="0" Margin="3,0,0,0" Click="tabdowntest"> 
         <Button.Background> 
          <ImageBrush ImageSource="TopMenuBar_Close.png" Stretch="Uniform"/> 
         </Button.Background> 
        </Button> 
       </DockPanel> 
      </Grid> 
     </Grid> 

Эта сетка является дочерним элементом DockPanel с именем 'TabsDock'. Он копируется со следующим кодом:

string gridXaml = XamlWriter.Save(TempTab); 
StringReader stringReader = new StringReader(gridXaml); 
XmlReader xmlReader = XmlReader.Create(stringReader); 
Grid newTab = (Grid)XamlReader.Load(xmlReader); 
TabsDock.Children.Add(newTab); 

Это код «Click» обработчик события, который должен быть вызван, когда либо оригинальное или прессуют скопированный кнопки. Но она вызывается только для оригинальный:

private void tabdowntest(object sender, MouseButtonEventArgs e) 
    { 
     Console.WriteLine("Button Pressed"); 
    } 
+1

Я ничего не вижу в этой ссылке, связанной с элементом управления сеткой или кнопкой. Я даже проследил его до источника CodeProject. Можете ли вы предоставить немного больше информации, особенно о том, что вы ожидаете при стрельбе, когда вы нажимаете, т. Е. Является ли это обработчиком событий в коде или привязан к экземпляру ICommand? – LordWilmore

+0

Звучит как удивительно сложный и подверженный ошибкам способ плохо переопределить шаблоны. –

+0

Спасибо! Я не знал, как использовать шаблоны в wpf. Только то, что мне нужно! – WPFHelp

ответ

0

В bindigs не установлен, вам необходимо установить их (комментарий в ориг должности):

Чтобы было ясно, что это только половина (поскольку он вернулся в 08). Это приведет к тому, что привязки будут оцениваться и результаты будут сериализованы. Если вы хотите сохранить привязки (как заданный вопрос), вы должны либо добавить ExpressionConverter в тип привязки во время выполнения (см. Вторую часть моего вопроса для соответствующей ссылки), либо посмотреть мой собственный ответ ниже, как это сделать в 4.0 ,

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