2011-06-11 207 views
1

我需要從代碼訪問邊界刷,如何綁定?字典資源和綁定

這不行:

BorderBrush="{Binding color}" 

<Border x:Name="brd" Background="Black" BorderBrush="White" BorderThickness="2" CornerRadius="3"> 

這裏我的XAML。

<UserControl x:Class="window6.Kbd" 
     x:Name="teclado" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:fps="clr-namespace:FPS.VirtualKeyboard;assembly=FPS.VirtualKeyboard" 
     mc:Ignorable="d" d:DesignWidth="418" Width="Auto" d:DesignHeight="177.326" Height="Auto" > 
<Grid d:LayoutOverrides="VerticalMargin"> 
    <fps:VirtualKeyboard x:Name="virtualKeyboard" BorderBrush="{Binding Color1}" > 

     <fps:VirtualKeyboard.Resources> 

      <fps:GetCharacterDependsOnSpecialKeysConverter x:Key="GetCharacterDependsOnSpecialKeysConverter"/> 


      <DataTemplate DataType="{x:Type fps:RegularKey}"> 
       <Canvas> 
        <RepeatButton 

    Focusable="False" 
    Content="{Binding .}" 
    Canvas.Left="{Binding Left}" 
    Canvas.Top="{Binding Top}" 
    Width="{Binding Width}" 
    Height="{Binding Height}" 
    Command="fps:VirtualKeyboard.ClickCommand"> 
         <RepeatButton.ContentTemplate> 
          <DataTemplate> 
           <Grid> 
            <ContentControl Content="{Binding ., Converter={StaticResource GetCharacterDependsOnSpecialKeysConverter}}"> 
             <ContentControl.ContentTemplate> 
              <DataTemplate> 
               <TextBlock Text="{Binding .}"/> 
              </DataTemplate> 
             </ContentControl.ContentTemplate> 
            </ContentControl> 
           </Grid> 
          </DataTemplate> 
         </RepeatButton.ContentTemplate> 
        </RepeatButton> 
       </Canvas> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type fps:SpecialKey}"> 
       <Canvas> 
        <RepeatButton x:Name="btn" Focusable="False" Content="{Binding .}" Canvas.Left="{Binding Left}" Canvas.Top="{Binding Top}" Width="{Binding Width}" Height="{Binding Height}" Command="fps:VirtualKeyboard.ClickCommand"> 
         <RepeatButton.ContentTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding Content}" TextWrapping="Wrap"/> 
          </DataTemplate> 
         </RepeatButton.ContentTemplate> 
        </RepeatButton> 
       </Canvas> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding IsLocked}" Value="True"> 
         <Setter Property="BorderBrush" Value="Yellow" TargetName="btn"/> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type fps:NumPadKey}"> 
       <Canvas> 
        <RepeatButton x:Name="btn" Focusable="False" Content="{Binding .}" Canvas.Left="{Binding Left}" Canvas.Top="{Binding Top}" Width="{Binding Width}" Height="{Binding Height}" Command="fps:VirtualKeyboard.ClickCommand"> 
         <RepeatButton.ContentTemplate> 
          <DataTemplate> 
           <StackPanel HorizontalAlignment="Left"> 
            <TextBlock Text="{Binding NumCase}" Foreground="Red" HorizontalAlignment="Left"/> 
            <TextBlock Text="{Binding Content}" TextWrapping="Wrap" HorizontalAlignment="Left"/> 
           </StackPanel> 
          </DataTemplate> 
         </RepeatButton.ContentTemplate> 
        </RepeatButton> 
       </Canvas> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding IsLocked}" Value="True"> 
         <Setter Property="BorderBrush" Value="Red" TargetName="btn"/> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 




      <Style TargetType="{x:Type RepeatButton}" > 
       <Setter Property="Foreground" Value="White" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type RepeatButton}"> 

          <Grid > 

           <Border x:Name="brd" Background="Black" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="2" CornerRadius="3"> 
            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/> 
           </Border> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsFocused" Value="True"/> 
           <Trigger Property="IsMouseOver" Value="True"> 

           </Trigger> 
           <Trigger Property="IsPressed" Value="True"> 
            <Setter Property="Background" TargetName="brd" Value="Gray"/> 
           </Trigger> 
           <Trigger Property="IsEnabled" Value="False"/> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 

     </fps:VirtualKeyboard.Resources> 


    </fps:VirtualKeyboard> 
</Grid> 

+0

請不要在你想出來之後刪除你的問題。你應該使用這樣的消息評論。另外,如果答案解決了您的問題,請點擊勾號接受。如果你自己想出來,發佈你自己的答案,爲他人着想。 – svick 2011-06-11 22:29:46

回答

0

喜歡這個?

brd.BorderBrush = new SolidColorBrush(Colors.Blue); 

如果您需要綁定到另一個屬性,那麼:

brd.SetBinding(Border.BorderBrushProperty, new Binding("SomeProperty") { Source = someObject }); 

[編輯]嘗試3 :)

不知道我完全理解,但是這可能是你是什麼尋找:

BorderBrush="{TemplateBinding BorderBrush}" 

現在設置BorderBrushRepeatButton和它的 應該管用。

+0

@阿爾斯坦 - 用約束例子更新答案 – 2011-06-11 20:08:56

+0

@阿爾斯坦 - 我想我終於找到了你要找的東西。更新了答案。 – 2011-06-11 20:17:33

+0

是的,如果您在模板中進行此更改,請將RepeatButton.BorderBrush設置爲您需要的畫筆,並且它將起作用。 – 2011-06-11 20:27:57