2011-10-18 2 views
1

Это очень простой вопрос: у меня есть строка, определенная в моем классе C#, и я хотел бы, чтобы это было содержимое кнопки XAML. Вот и все. Что я могу положить в ????. Я знаю, что это базовый WPF ... Я буду продолжать искать ответ. Заранее спасибо.Передача строки с C# на кнопку XAML

Мой XAML

<Window x:Class="BarScore.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     > 

    <StackPanel> 
     <Button Name="Start" Content="???" Height="25" Width="100" 
      Margin="20" /> 
    </StackPanel> 
</Window> 

Мой C# код

using System; 
using System.Windows; 
using System.Windows.Controls; 

namespace BarScore 
{ 
    public partial class MainWindow : Window 
    { 
     public string BUTTON_NAME_STR = "START"; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

PS: Я знаю, что я могу пойти на код и написать:

Start.Content = BUTTON_NAME_STR; 

, но я хотел бы, чтобы это было от XAML до C#, а не наоборот, если это возможно.

+0

Вы указали ** Связывание ** в качестве одного из ваших тегов. Разве вы не получили в Интернете какой-либо простой пример того, как настроен контекст данных и как работает привязка? –

+0

@AngelWPF Я нашел несколько примеров, но большинство из них были связаны с ресурсами (статическими и динамическими), которые другие связывали с внешним xml. Я включил привязку, поскольку я мог бы быть синтаксисом привязки. – Pimenta

ответ

1

Для связывания на работу, вам нужно будет превратить поле в собственность, как в следующем.

using System; 
using System.Windows; 
using System.Windows.Controls; 

namespace BarScore 
{ 
    public partial class MainWindow : Window 
    { 
     private string _BUTTON_NAME_STR = "START"; 
     public string BUTTON_NAME_STR 
     { 
      get 
      { 
       return _BUTTON_NAME_STR; 
      } 
      set 
      { 
       _BUTTON_NAME_STR = value; 
      } 
     } 

     public MainWindow() 
     { 
      InitializeComponent(); 
      Start.DataContext=this; 
     } 
    } 
} 

Затем установите привязки к вашей собственности

<StackPanel> 
    <Button Name="Start" Content="{Binding BUTTON_NAME_STR}" 
     Height="25" Width="100" 
     Margin="20" /> 
</StackPanel> 

Еще несколько ссылок на него:

http://blogs.msdn.com/b/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx

http://msdn.microsoft.com/en-us/magazine/cc163299.aspx

+0

это именно то, что я искал. Спасибо за усилия и все Тебя, которые помогли. Я не смог собрать различные предложения. – Pimenta

3

Я подозреваю, что вы хотите что-то вроде:

<Button Name="Start" Content="{Binding BtnName}" /> 

но вы можете затем также необходимо установить контекст данных для вмещающей формы/страниц/независимо.

+0

Я пробовал ваше решение, но оно не работает. Ошибок не отображается, но ни значение содержимого кнопки, ни пустая кнопка. Можете ли вы объяснить, что вы имеете в виду под «заданием контекста данных для содержащейся формы/страницы/всего»? Кстати, я использую Окно. Спасибо за попытку. – Pimenta

+0

@Pimenta: Я имею в виду установку свойства DataContext для окна на объект, содержащий данные (которые могут быть «этим»). В качестве альтернативы вы можете указать другой корень связывания в самом связывании. –

+0

Спасибо за обновление, это была недостающая ссылка. @Redburn отобразил полный ответ. – Pimenta

1

Предполагая, что ваше BtnName имущества находится на материнской Window вы можете использовать следующее:

<Button Name="Start" Content="{Binding BtnName, 
    RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" /> 
2

Оба Скит и @ Джона @Steve Greatrex ответы справедливы, но я хотел бы объяснить их @Pimenta.

Данные привязки в WPF относительно Источник. Вы можете

  1. явно установить этот источник на Binding выражения, как это имело место в @ ответ Стива (в его случае это был относительный источник);

  2. или он может быть неявным, как в решении @ Jon, и в этом случае источником по умолчанию является DataContext элемента управления, который может быть установлен вручную или унаследован от его родителя.

Так, @ решение Стива на работу, что вы смотрите, как ваш «код C#» должен быть код позади вашего XAML, которую он принимает на себя, чтобы быть окно (пункт по умолчанию в WPF).

Для решения @ Jon для работы вам необходимо установить DataContext для вашей кнопки. Либо непосредственно в письменной форме:

Start.DataContext=this; 

или установив его (в коде) для контроля где-то в иерархии XAML.

Я надеюсь, что это помогает :)

+0

@AbdoulMoumen Спасибо за объяснение – Pimenta

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