2014-09-02 4 views
1

Coxy과 같은 질문을하고 싶습니다. 리본 버튼의 이미지 위에 읽지 않은 항목 수를 표시하고 싶습니다.wpf microsoft ribbonbutton 이미지에 읽지 않은 알림 추가

예 :

Like this

내가 전체 템플릿의 사본을 수정하지 않고 그것을 할 수 있습니까? 내가 같은 질문을 다시하는 이유는 Microsoft 리본 컨트롤과 Coxy 질문에서 제공된 솔루션을 사용하고 있으며 Telerik의 리본 컨트롤에만 적용 할 수 있기 때문입니다.

+0

Adorner를 사용해 보셨습니까? http://djfr.wordpress.com/2012/03/30/creating-a-notification-button-in-wpf/ – Ben

+0

* Coxy와 같은 질문을하고 싶습니다 * ... 왜? 우리는이 웹 사이트에서 중복 된 질문을 좋아하지 않습니다 ... 무엇이 복제본으로 닫히지 않을 정도로 다른 것입니까? 다른 질문에서 답을 따를 수없는 이유가 없습니다. – Sheridan

+0

Coxy는 telerik의 리본을 사용하고 있으며 Microsoft 리본에 동일한 솔루션을 적용 할 수 없습니다. 그리고 셰리 던은 다음에 예의 바르게하려고 노력합니다. –

답변

0

Martin Andersen이 맞습니다. 현재 XAML에서 리본 단추를 만들고 문서 개요 창에서 마우스 오른쪽 단추로 클릭 한 다음 템플릿 편집을 선택하고 복사본을 만듭니다. VS 다음과 같은 오류 메시지가 표시되고 더 템플릿이 생성되지 않습니다 : 당신이 혼합에서 같은 일을 할 경우

Visual Studio error occurring when creating a copy of the ribbon button control template

같은 오류 메시지가 발생하지만 리본 버튼 컨트롤 템플릿은 실제로 생성됩니다. 불행히도이 템플릿은 잘못된 것입니다. 여기에는 Binding이 (0)에 바인드 된 여러 트리거가 포함됩니다. 다음은 그러한 잘못된 트리거의 예입니다.

<DataTrigger Binding="{Binding (0)}" Value="True"> 
    <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/> 
    <Setter Property="Background" TargetName="OuterBorder" Value="Transparent"/> 
    <Setter Property="BorderBrush" TargetName="OuterBorder" Value="Transparent"/> 
    <Setter Property="CornerRadius" TargetName="OuterBorder" Value="0"/> 
</DataTrigger> 

이 문제는 Microsoft에보고되었다 : https://connect.microsoft.com/VisualStudio/feedback/details/794891/problems-styling-wpf-4-5-ribbon-control 그들은이 문제에 첨부 파일로 기본 컨트롤 템플릿을 제공하지만, 불행하게도 나는 그 (것)들을 다운로드 할 수 없습니다. 결과 파일은 항상 비어 있습니다 (0 킬로바이트). 아무나 당신이 그것을 다운로드 할 수 있습니까? 솔루션

내 현재의 조언이 ContentControl에서 파생 모든 알림 버블을 처리하는 다른 사용자 지정 컨트롤에서 버튼을 캡슐화하는 것입니다 제안

. 그런 다음이 새 컨트롤의 내용으로 단추를 설정할 수 있습니다. 나는 현재 예제로 작업 중입니다. 유용한 것을 발견하면이 게시물을 업데이트 할 것입니다.

<ControlTemplate x:Key="RibbonButtonWithNotificationStyle" TargetType="{x:Type RibbonButton}"> 
    <Border x:Name="OuterBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding CornerRadius}" SnapsToDevicePixels="True"> 
     <Border x:Name="InnerBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="{TemplateBinding CornerRadius}" Padding="{TemplateBinding Padding}"> 
      <StackPanel x:Name="StackPanel"> 
       <Image x:Name="PART_Image" RenderOptions.BitmapScalingMode="NearestNeighbor" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Height="32" Margin="{DynamicResource {ComponentResourceKey ResourceId=LargeImageMargin, TypeInTargetAssembly={x:Type Ribbon}}}" Source="{TemplateBinding LargeImageSource}" VerticalAlignment="Center" Width="32"/> 
       <Grid x:Name="Grid" HorizontalAlignment="Center" VerticalAlignment="Center"> 
        <RibbonTwoLineText x:Name="TwoLineText" HorizontalAlignment="Center" LineStackingStrategy="BlockLineHeight" LineHeight="13" Margin="1,1,1,0" TextAlignment="Center" Text="{TemplateBinding Label}" VerticalAlignment="Top"/> 
       </Grid> 
      </StackPanel> 
     </Border> 
    </Border> 
    <ControlTemplate.Triggers> 
     <DataTrigger Binding="{Binding ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Self}}" Value="Large"> 
      <Setter Property="MinWidth" Value="44"/> 
      <Setter Property="Height" Value="66"/> 
      <Setter Property="MinHeight" TargetName="Grid" Value="26"/> 
      <Setter Property="RibbonTwoLineText.HasTwoLines" TargetName="TwoLineText" Value="True"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Self}}" Value="Small"> 
      <Setter Property="Height" Value="22"/> 
      <Setter Property="Margin" TargetName="PART_Image" Value="1,0"/> 
      <Setter Property="Source" TargetName="PART_Image" Value="{Binding SmallImageSource, RelativeSource={RelativeSource TemplatedParent}}"/> 
      <Setter Property="Width" TargetName="PART_Image" Value="16"/> 
      <Setter Property="Height" TargetName="PART_Image" Value="16"/> 
      <Setter Property="HorizontalAlignment" TargetName="TwoLineText" Value="Left"/> 
      <Setter Property="Margin" TargetName="TwoLineText" Value="1"/> 
      <Setter Property="Orientation" TargetName="StackPanel" Value="Horizontal"/> 
     </DataTrigger> 

     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Self}}" Value="Small"/> 
       <Condition Binding="{Binding IsInQuickAccessToolBar, RelativeSource={RelativeSource Self}}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="Height" Value="Auto"/> 
     </MultiDataTrigger> 
     <DataTrigger Binding="{Binding ControlSizeDefinition.IsLabelVisible, RelativeSource={RelativeSource Self}}" Value="False"> 
      <Setter Property="Visibility" TargetName="TwoLineText" Value="Collapsed"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Self}}" Value="Collapsed"> 
      <Setter Property="Visibility" TargetName="PART_Image" Value="Collapsed"/> 
     </DataTrigger> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" TargetName="OuterBorder" Value="{Binding MouseOverBackground, RelativeSource={RelativeSource TemplatedParent}}"/> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{Binding MouseOverBorderBrush, RelativeSource={RelativeSource TemplatedParent}}"/> 
      <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/> 
     </Trigger> 
     <Trigger Property="IsKeyboardFocused" Value="True"> 
      <Setter Property="Background" TargetName="OuterBorder" Value="{Binding FocusedBackground, RelativeSource={RelativeSource TemplatedParent}}"/> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{Binding FocusedBorderBrush, RelativeSource={RelativeSource TemplatedParent}}"/> 
      <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/> 
     </Trigger> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter Property="Background" TargetName="OuterBorder" Value="{Binding PressedBackground, RelativeSource={RelativeSource TemplatedParent}}"/> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{Binding PressedBorderBrush, RelativeSource={RelativeSource TemplatedParent}}"/> 
      <Setter Property="BorderBrush" TargetName="InnerBorder" Value="Transparent"/> 
     </Trigger> 
     <Trigger Property="IsInControlGroup" Value="True"> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{Binding Ribbon.BorderBrush, RelativeSource={RelativeSource TemplatedParent}}"/> 
      <Setter Property="BorderThickness" TargetName="OuterBorder" Value="0,0,1,0"/> 
      <Setter Property="CornerRadius" TargetName="OuterBorder" Value="0"/> 
      <Setter Property="CornerRadius" TargetName="InnerBorder" Value="0"/> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Opacity" TargetName="PART_Image" Value="0.5"/> 
      <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="#FF9E9E9E"/> 
     </Trigger> 
     <DataTrigger Binding="{Binding (0)}" Value="True"> 
      <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/> 
      <Setter Property="Background" TargetName="OuterBorder" Value="Transparent"/> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="Transparent"/> 
      <Setter Property="CornerRadius" TargetName="OuterBorder" Value="0"/> 
     </DataTrigger> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource TemplatedParent}}" Value="True"/> 
       <Condition Binding="{Binding (0)}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/> 
     </MultiDataTrigger> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource TemplatedParent}}" Value="True"/> 
       <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="False"/> 
       <Condition Binding="{Binding (0)}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
     </MultiDataTrigger> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsDropDownOpen, FallbackValue=false, RelativeSource={RelativeSource TemplatedParent}}" Value="True"/> 
       <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="False"/> 
       <Condition Binding="{Binding (0)}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/> 
     </MultiDataTrigger> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True"/> 
       <Condition Binding="{Binding (0)}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="Background" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/> 
      <Setter Property="CornerRadius" TargetName="OuterBorder" Value="0"/> 
      <Setter Property="BorderBrush" TargetName="InnerBorder" Value="Transparent"/> 
      <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
     </MultiDataTrigger> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsKeyboardFocused, RelativeSource={RelativeSource Self}}" Value="True"/> 
       <Condition Binding="{Binding (0)}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="Background" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}"/> 
      <Setter Property="CornerRadius" TargetName="OuterBorder" Value="0"/> 
      <Setter Property="BorderBrush" TargetName="InnerBorder" Value="Transparent"/> 
      <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
     </MultiDataTrigger> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsPressed, RelativeSource={RelativeSource Self}}" Value="True"/> 
       <Condition Binding="{Binding (0)}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="Background" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/> 
      <Setter Property="CornerRadius" TargetName="OuterBorder" Value="0"/> 
      <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
     </MultiDataTrigger> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsInControlGroup, RelativeSource={RelativeSource Self}}" Value="True"/> 
       <Condition Binding="{Binding (0)}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}"/> 
     </MultiDataTrigger> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="False"/> 
       <Condition Binding="{Binding (0)}" Value="True"/> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
     </MultiDataTrigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

불량 바인딩이 묶여 야 할 프로퍼티를 알아낼 수 있습니까? 즉, 코드에 바인딩해야 할 것에 대한 힌트를주기위한 충분한 단서가 있습니까? –

+0

나는 가까이서 볼 수는 없었지만 나는 할 수 없었다. 잘못된 템플릿으로 게시물을 업데이트했습니다. – feO2x

+0

알 수있는 실제 방법은 없지만 모든 {Binding (0)} 조건이 같은 속성에 있다고 느끼고 있습니다. 다른 모든 속성이 괜찮은 것처럼 보입니다. 드롭 다운 메뉴가 표시되는지 또는 컨트롤에 있는지 여부를 나타내는 컨트롤의 일부 속성 일 수 있습니다. 나는 물건이 무엇일지도 모르는지에 관해 클래스 학생들에 관해 충분히 알지 않는다. –

1

이 코멘트에 넣어하는 데 시간이 너무 오래 때문에 내가 대답이 추가 해요 :

에러가 발생한 컨트롤 템플릿 여기

RibbonButton의 전체 잘못된 컨트롤 템플릿입니다.

나는 Microsoft 다운로드 사이트 &에 가서 리본 컨트롤의 소스를 here에서 다운로드했습니다. 모든 트리거가있는 전체 템플릿이 여기에 있습니다. 저작권으로 보호되어 있으므로 여기에 붙여 넣지는 않겠지 만 누구나 다운로드하여 설치할 수 있습니다. 나는 생각한다.

설치 프로그램이 C : \ Program Files (x86) \ MicrosoftRibbonForWPF 폴더에 원본과 함께 zip 파일을 설치합니다. 나는 zip 파일을 VS 프로젝트 폴더로 추출했다.

내가보고있는 템플릿은 v4.0 \ Themes \ Generic.xaml 파일에 있습니다.

이러한 잘못된 트리거는 실제로 동일한 속성을 참조합니다.정적 개체 인 SystemParameters2.Current의 속성은 HighContrast입니다.

아마도 이러한 트리거를 사용하지 않는 응용 프로그램의 사용자 지정 템플릿을 함께 사용할 수 있습니다. 적어도 그것은 내가 할 일이다.