WPF第三方控件DXperience的dxn:NavBarControl添加样式

把第三方控件DXNavBar修改成这效果

主程序的代码如下:

... ...
<dxn:NavBarControl HorizontalAlignment="Stretch" Margin="-1" Name="DXNavBar" DockPanel.Dock="Top" >
  <dxn:NavBarControl.Resources>
     <ResourceDictionary Source="StyleFiles/DXNavBarStyle.xaml" />   //引用的样式文件
  </dxn:NavBarControl.Resources>
  <dxn:NavBarGroup Name="SysSaveGroup" ImageSource="/Assets/images/acSysSaveIcon.png">
     <dxn:NavBarItem Content="子系统配置" Name="ChildSysConfig" />
     <dxn:NavBarItem Content="机构设置" Name="JiGouConfig" />
     <dxn:NavBarItem Content="用户管理" Name="UserManager" />
     <dxn:NavBarItem Content="功能角色" Name="GNJSe" />
        ....
   </dxn:NavBarGroup>

   <dxn:NavBarGroup Name="RunCheckGroup" ImageSource="assets/images/acRunCheckIcon.png" />
       
   <dxn:NavBarGroup Name="SpacerDataConfigGroup" ImageSource="assets/images/acSpacerConfigIcon.png" />

   <dxn:NavBarGroup Name="DireManagerGroup" ImageSource="assets/images/acDirectoryManagerIcon.png" />
   
   <dxn:NavBarGroup Name="DataDictionaryGroup" ImageSource="assets/images/acDataDictionaryIcon.png" />

   <dxn:NavBarGroup Name="ServerConfig" ImageSource="assets/images/acServerConfigIcon.png" />
                    
</dxn:NavBarControl>
... ...

<dxn:NavBarGroup Header="阿里巴巴" ImageSource="{图片路径}" />
注:<dxn:NavBarGroup 中的Header与ImageSource属性是跟样式文件中的<DataTemplate x:Key="
{dxnt:CommonElementsThemeKey ResourceKey=HeaderTemplate}"> ... </DataTemplate> 内容有关的


 <dxn:NavBarItem Content="巴豆" ImageSource="{Item图片路径}"/>
注:<DataTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=ItemContentTemplate}"> ... </DataTemplate>
控制Item内容,DockingLeftContentMargin文字的位置,DockingLeftImageMargin图片的位置,对应的还有DockingTopContentMargin,
DockingBottomContentMargin, DockingRightContentMargin,其实用一个DockingLeftContentMargin方向就行了。

主程序.CS后台代码如下:

public DXNavBarComp()
   {
        InitializeComponent();
        DXNavBar.View = new SideBarView();
   }

 

-----------------------------------------------------------

样式文件DXNavBarStyle.xaml代码:

</ResourceDictionary ... >    
    <!-- 设置Header的背景色或图 -->
    <ControlTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=GroupHeaderTemplate}" 
                     TargetType="dxn:NavBarGroupHeader">
        <Border x:Name="HeaderBorder" BorderBrush="#FFFFFFFF" BorderThickness="0" Height="37" Width="227">
            <Border.Background>
                <ImageBrush ImageSource="/Assets/images/navBarDefaulted.png" Stretch="Uniform" />
            </Border.Background>

            <dxn:ImageAndTextContentPresenter x:Name="groupHeaderLabel" 
                      ImageFallbackSize="100" Content="{Binding}" 
                      Style="{DynamicResource {dxnt:NavBarGroupControlThemeKey ResourceKey=HeaderStyle}}" 
                      Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource TemplatedParent}}"
                      />
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" TargetName="HeaderBorder" >
                    <Setter.Value>
                        <ImageBrush ImageSource="/Assets/images/navBarSelected.png" Stretch="Uniform" />
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Cursor" Value="Hand" />
                <Setter Property="Background" TargetName="HeaderBorder" >
                    <Setter.Value>
                        <ImageBrush ImageSource="/Assets/images/navBarSelected.png" Stretch="Uniform" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
  
    <DataTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=HeaderTemplate}">
        <DockPanel Margin="0" >
            <!-- 设置Header的标题样式,即是设计页中dxn:NavBarGroup的ImageSource -->
            <Image x:Name="image" Source="{Binding Path=ImageSource}" DockPanel.Dock="Left" Height="37" Width="227"/>
            <!-- dxn:NavBarGroup里的Header属性跟这个TextBlock捆绑,因为直接用图片,所以注释掉TextBlock -->
            <!--<TextBlock Text="{Binding Path=Header}" Foreground="Green" VerticalAlignment="Center" Margin="4,0,0,0"/>-->
        </DockPanel>
        
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=ImageSource}" Value="{x:Null}">
                <Setter Property="Visibility" Value="Collapsed" TargetName="image"/>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>

    <!-- DockingLeftContentMargin文字的位置,DockingLeftImageMargin图片的,对应的还有Top,Botton,Right-->
    <DataTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=ItemContentTemplate}">
        <dxn:ImageAndTextDecorator x:Name="itemContent" 
                ImageFallbackSize="16" DisplayModeImageMargin="3"
                DockingLeftContentMargin="70,3,3,3" DisplayModeTextMargin="3"
                ImageDocking="{Binding Path=(dxn:NavBarViewBase.LayoutSettings).ImageDocking, RelativeSource={RelativeSource TemplatedParent}}" 
                ImageSource="{Binding Path=ImageSource}" ImageStyle="{DynamicResource {dxnt:NavBarItemControlThemeKey ResourceKey=ItemImageStyle}}" 
                ContentSource="{Binding Path=Content}" 
                ContentStyle="{DynamicResource {dxnt:NavBarItemControlThemeKey ResourceKey=ItemTextStyle}}" />
    </DataTemplate>

    <!-- Item内容的选择样式MouseOver,Selected-->
    <ControlTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=ItemTemplate}" TargetType="{x:Type dxn:NavBarItemControl}">
        <Grid x:Name="grid" Margin="0" Width="218" Height="30" >
            <Grid.Background>
                <ImageBrush ImageSource="/Assets/images/ListBoxDefaulted.png" Stretch="Uniform" />
            </Grid.Background>
                
            <ContentPresenter x:Name="item" />
        </Grid>
        <ControlTemplate.Triggers>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" TargetName="grid">
                    <Setter.Value>
                        <ImageBrush ImageSource="/Assets/images/ListBoxSelected.png" Stretch="Uniform" />
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" TargetName="grid">
                    <Setter.Value>
                        <ImageBrush ImageSource="/Assets/images/ListBoxSelected.png" Stretch="Uniform" />
                    </Setter.Value>
                </Setter>
            </Trigger>
            <!--item selected background-->
            <DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
                <Setter Property="Background" TargetName="grid">
                    <Setter.Value>
                        <ImageBrush ImageSource="/Assets/images/ListBoxSelected.png" Stretch="Uniform" />
                    </Setter.Value>
                </Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=IsEnabled}" Value="false">
                <Setter Property="Opacity" Value="0.5"/>
            </DataTrigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <!-- 可能是作用于滚动条,暂不清楚 --> 
    <ControlTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=SmoothScrollTemplate}" 
                     TargetType="ContentControl">
        <dxn:GroupScrollableContentControl x:Name="scrollableContent" 
                     Orientation="{Binding Path=NavBar.View.ItemsPanelOrientation}" 
                     dx:FocusHelper2.Focusable="False">
            <dxn:GroupScrollableContentControl.AllowScrolling>
                <Binding Path="NavBar.View.NavBarViewKind">
                    <Binding.Converter>
                        <dxn:NavBarViewKindToBooleanConverter/>
                    </Binding.Converter>
                </Binding>
            </dxn:GroupScrollableContentControl.AllowScrolling>
            <ContentPresenter/>
        </dxn:GroupScrollableContentControl>
    </ControlTemplate>

    <!-- 针对边框Items列表的边框;当内容过多时出现的滚动条 -->
    <ControlTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=GroupItemsContainerTemplate}" 
                     TargetType="dxn:GroupItemsContainer">
        <Grid>
            <dx:LayoutTransformPanel Orientation="{Binding Path=NavBar.View.Orientation}">
                <Border x:Name="border" Background="Transparent" BorderBrush="#990000" BorderThickness="2" Padding="0">
                    <Border HorizontalAlignment="Stretch" x:Name="border2" Width="Auto" Height="Auto" 
                            Background="#FFFFFFFF" BorderThickness="0"/>
                </Border>
            </dx:LayoutTransformPanel>
            <dxn:ScrollControl x:Name="scrollControl" 
                  ScrollButtonsControlTemplate="{DynamicResource {dxnt:CommonElementsThemeKey ResourceKey=SmoothScrollTemplate}}"
                  ScrollBarControlTemplate="{DynamicResource {dxnt:CommonElementsThemeKey ResourceKey=NormalScrollTemplate}}" 
                  dx:FocusHelper2.Focusable="False">
                <dx:LayoutTransformPanel Orientation="{Binding Path=NavBar.View.Orientation}">
                    <ContentPresenter x:Name="content" Content="{TemplateBinding Content}" 
                                      ContentTemplate="{TemplateBinding ContentTemplate}" Margin="0" />
                    <!-- 影响Item整个框内容的布局 -->
                </dx:LayoutTransformPanel>
            </dxn:ScrollControl>
        </Grid>
    </ControlTemplate>

    <!-- ScrollUpButtonTemplate 是整个NavBar滚动按钮 (在SideBarView模式没啥用,略)-->

    <!-- ScrollUpGroupButtonTemplate 是ItemGroup内的滚动按钮-->
    <ControlTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=ScrollUpGroupButtonTemplate}" 
                     TargetType="{x:Type RepeatButton}">
        <Border x:Name="border" Background="LightGray" BorderBrush="#FFFFFFFF" BorderThickness="0,0,0,0" Margin="0">
            <Path Stretch="Fill" Fill="Black" Data="F1 M 1257,761L 1258,761L 1262,766L 1253,766L 1257,761 Z " 
                  Width="9" Height="5" Margin="0,2,0,2" x:Name="path"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.25" TargetName="path"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Gray" TargetName="border"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" Value="Gray" TargetName="border"/>
                <Setter Property="Fill" Value="#FFD4DFF0" TargetName="path"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <ControlTemplate x:Key="{dxnt:CommonElementsThemeKey ResourceKey=ScrollDownGroupButtonTemplate}" 
                     TargetType="{x:Type RepeatButton}">
        <Border x:Name="border" Background="LightGray" BorderBrush="#FFFFFF" BorderThickness="0,0,0,0" Margin="0">
            <Path Stretch="Fill" Fill="Black" Data="F1 M 1263,769L 1262,769L 1258,764L 1267,764L 1263,769 Z " 
                  Margin="0,2,0,2" Width="9" Height="5" x:Name="path"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Opacity" Value="0.25" TargetName="path"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Gray" TargetName="border"/>
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" Value="Gray" TargetName="border"/>
                <Setter Property="Fill" Value="#FFD4DFF0" TargetName="path"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</ResourceDictionary>


注:暂时还没找到当Header被选择时,触发选择效果,目前只有IsMouseOver,IsPressed响应,但是item内容就可以,有待日后更新.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值