2013-11-28 5 views
0

У меня есть приложение WPF. Я создал собственный стиль кнопки. Кнопка содержит текстовое поле & два изображения. Я создал стиль в моем файле App.xaml. У меня есть вопрос. Я хочу создать несколько кнопок в файле MainWindow.xaml, который будет использовать стиль из моего App.xaml. Это работает, но теперь я хочу привязать текстовое поле & к элементу в объекте списка Securities.Пользовательская кнопка WPF и привязка

Итак, когда вы создаете кнопку в моем MainWindow, как мне установить привязку для текстового поля & изображений?

<!-- style for button --> 
    <Style x:Key="buttSecurity" TargetType="Button"> 
     <Setter Property="Margin" Value="1,1,1,1"/> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}">      
        <Grid Background="{StaticResource brushSecurityButtRadial}"> 
         <Grid.RowDefinitions> 
          <RowDefinition/> 
          <RowDefinition Height="2*"/> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition/> 
          <ColumnDefinition/> 
         </Grid.ColumnDefinitions> 
         <TextBlock Grid.Row="0" Grid.ColumnSpan="2" Style="{StaticResource txtSecurity}"/> 
         <Image Grid.Row="1" Grid.Column="0"/> 
         <Image Grid.Row="1" Grid.Column="1"/> 
        </Grid>    
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+0

http://stackoverflow.com/questions/6807006/c-sharp-databinding-tutorial – Naresh

+1

Вы не собираетесь изменять или удалять свой вопрос снова, когда у вас есть ответ? – Sheridan

+0

Я не изменил свой последний вопрос. Я понимаю вашу точку зрения, что я дал ответ на неправильный ответ и с тех пор обновил его. Я никогда не удалял свои вопросы, не знаю, откуда вы это взяли? – mHelpMe

ответ

0

Вы не можете делать то, что вы хотите напрямую. Путь к достижению этой функциональности, это поместить ваш ControlTemplate и Style в UserControl, а затем добавить три DependencyProperty с, чтобы связываться с:

<Style x:Key="buttSecurity" TargetType="Button"> 
     <Setter Property="Margin" Value="1,1,1,1"/> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}">      
        <Grid Background="{StaticResource brushSecurityButtRadial}"> 
         <Grid.RowDefinitions> 
          <RowDefinition/> 
          <RowDefinition Height="2*"/> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition/> 
          <ColumnDefinition/> 
         </Grid.ColumnDefinitions> 
         <TextBlock Grid.Row="0" Grid.ColumnSpan="2" Style= 
"{StaticResource txtSecurity}" Text="{Binding TextValue, RelativeSource={RelativeSource 
AncestorType={x:Type YourXmlNamespacePrefix:YourButtonUserControl}}}" /> 
         <Image Grid.Row="1" Grid.Column="0" Source="{Binding 
ImageSource1, RelativeSource={RelativeSource AncestorType={x:Type 
YourXmlNamespacePrefix:YourButtonUserControl}}}" /> 
         <Image Grid.Row="1" Grid.Column="1" Source="{Binding 
ImageSource2, RelativeSource={RelativeSource AncestorType={x:Type 
YourXmlNamespacePrefix:YourButtonUserControl}}}" /> 
        </Grid>    
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Если предположить, что у вас есть Images папку, вы бы затем использовать UserControl вроде этого:

<YourXmlNamespacePrefix:YourButtonUserControl TextValue="Click me" 
    ImageSource1="/AppName;component/Images/Image1.jpg" 
    ImageSource1="/AppName;component/Images/Image2.jpg" /> 

Я не буду утруждать показывать вам, как объявить DependencyProperty как есть нагрузки ресурса на которые можно найти в Интернете.

0

Try TemplateBinding

<Window.Resources> 
    <Style x:Key="buttSecurity" TargetType="Button"> 
     <Setter Property="Margin" Value="1,1,1,1"/> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Grid Background="Red"> 
         <Grid.RowDefinitions> 
          <RowDefinition/> 
          <RowDefinition Height="2*"/> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition/> 
          <ColumnDefinition/> 
         </Grid.ColumnDefinitions> 
         **<TextBlock Grid.Row="0" Grid.ColumnSpan="2" Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}"/>** 
         <Image Grid.Row="1" Grid.Column="0"/> 
         <Image Grid.Row="1" Grid.Column="1"/> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Button Content="{Binding MyText}" Style="{StaticResource buttSecurity}"/> 
Смежные вопросы