Xaml在WPF中的最佳实践 [英] Xaml best practice in WPF
问题描述
这是wpf的最佳做法
is this a best practice in wpf
<TabControl x:Name="tabMain"
BorderThickness="1"
Grid.Row="0"
Grid.RowSpan="2"
IsSynchronizedWithCurrentItem="True"
Margin="0"
Padding="0"
Background="#FFFFFF"
>
<TabControl.Resources>
<Style x:Key="tabcontrol"
TargetType="local:cTabitem">
<!--<Setter Property="FontFamily"
Value="{StaticResource SegoSemiboldFont}" />-->
<Setter Property="FontSize"
Value="15" />
<Setter Property="Margin"
Value="1 -4 0 0" />
<Setter Property="Padding"
Value="0" />
<Setter Property="Cursor"
Value="Hand" />
<Setter Property="Width"
Value="{Binding}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:cTabitem">
<Border x:Name="Border"
BorderThickness="1"
Height="65"
Background="#ECECEC">
<Grid>
<StackPanel Orientation="Vertical"
HorizontalAlignment="Center"
VerticalAlignment="Top"
x:Name="stack" >
<Image x:Name="img"
Source="{Binding SelectedImage, RelativeSource={RelativeSource TemplatedParent}}"
RenderOptions.BitmapScalingMode="HighQuality"
RenderOptions.EdgeMode="Aliased"
SnapsToDevicePixels="True"
VerticalAlignment="Top"
Stretch="None" ></Image>
<!--<StackPanel.ToolTip>
<ContentPresenter x:Name="ContentSites"
Margin="5,0"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header">
</ContentPresenter>
</StackPanel.ToolTip>-->
<Label x:Name="lbl_headText" Foreground="Black" FontSize="11" Width="{TemplateBinding Width}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Padding="0 5" HorizontalContentAlignment="Center" FontWeight="Bold" >
<ContentPresenter x:Name="lbl_ContentSites"
Margin="0 0 0 12"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header">
</ContentPresenter>
</Label>
</StackPanel>
</Grid>
</Border>
<ControlTemplate.Triggers>
<!--<Trigger Property="IsSelected"
Value="True">
<Setter TargetName="Border"
Property="Background"
Value="#ECECEC" />
<Setter TargetName="lbl_headText"
Property="Foreground"
Value="Black" />
--><!--<Setter TargetName="Border"
Property="BorderBrush"
Value="{x:Static local:cImageResources.clLinks}" />-->
<!--<Setter TargetName="Border"
Property="BorderThickness"
Value="0,1,0,0" />--><!--
<Setter TargetName="img"
Property="Source"
Value="{Binding SelectedImage, RelativeSource={RelativeSource TemplatedParent}}" />
</Trigger>
<Trigger Property="IsSelected"
Value="False">
<Setter TargetName="Border"
Property="Background"
Value="#141414" />
<Setter TargetName="lbl_headText"
Property="Foreground"
Value="#A6A6A6" />
<Setter TargetName="img"
Property="Source"
Value="{Binding NormalImage, RelativeSource={RelativeSource TemplatedParent}}" />
</Trigger>
<Trigger Property="IsMouseOver"
Value="True">
<Setter TargetName="Border"
Property="Background"
Value="#141414" />
<Setter TargetName="lbl_headText"
Property="Foreground"
Value="White" />
<Setter TargetName="img"
Property="Source"
Value="{Binding SelectedImage, RelativeSource={RelativeSource TemplatedParent}}" />
</Trigger>-->
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver"
Value="True" />
<Condition Property="IsTabStop"
Value="True" />
<Condition Property="IsSelected" Value="true"/>
</MultiTrigger.Conditions>
<Setter TargetName="Border"
Property="Background"
Value="#F1F1F1" />
<Setter TargetName="img"
Property="Source"
Value="{Binding SelectedImage, RelativeSource={RelativeSource TemplatedParent}}" />
<Setter TargetName="lbl_headText"
Property="Foreground"
Value="Black" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver"
Value="True" />
<Condition Property="IsSelected" Value="false"/>
</MultiTrigger.Conditions>
<Setter TargetName="Border"
Property="Background"
Value="#F1F1F1" />
<Setter TargetName="img"
Property="Source"
Value="{Binding HoverImage, RelativeSource={RelativeSource TemplatedParent}}" />
<Setter TargetName="lbl_headText"
Property="Foreground"
Value="White" />
<Setter TargetName="lbl_headText"
Property="Background"
Value="#000000" />
<Setter TargetName="Border" Property="Background" Value="#414040"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver"
Value="false" />
<Condition Property="IsSelected" Value="false"/>
</MultiTrigger.Conditions>
<Setter TargetName="Border"
Property="Background"
Value="#F1F1F1" />
<Setter TargetName="img"
Property="Source"
Value="{Binding NormalImage, RelativeSource={RelativeSource TemplatedParent}}" />
<Setter TargetName="lbl_headText"
Property="Foreground"
Value="White" />
<Setter TargetName="lbl_headText"
Property="Background"
Value="#000000" />
<Setter TargetName="Border" Property="Background" Value="#343434"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type TabPanel}">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</TabControl.Resources>
<local:cTabitem Header="Status"
Width="102"
Style="{StaticResource tabcontrol}"
x:Name="tboverview"
NormalImage="/Wpftabtest;component/Resources/Home1.png"
SelectedImage="/Wpftabtest;component/Resources/Home2.png"
HoverImage ="/Wpftabtest;component/Resources/Home3.png">
</local:cTabitem>
<local:cTabitem Style="{StaticResource tabcontrol}"
Width="102"
Header="Driver Scan"
x:Name="tbScan"
NormalImage="/Wpftabtest;component/Resources/DriverScan1.png"
SelectedImage="/Wpftabtest;component/Resources/DriverScan2.png"
HoverImage ="/Wpftabtest;component/Resources/DriverScan3.png">
</local:cTabitem>
<local:cTabitem x:Name="tbWebProtection"
Width="102"
Style="{StaticResource tabcontrol}"
Header="Backup"
NormalImage="/Wpftabtest;component/Resources/Backup1.png"
SelectedImage="/Wpftabtest;component/Resources/Backup2.png"
HoverImage ="/Wpftabtest;component/Resources/Backup3.png">
</local:cTabitem>
<local:cTabitem x:Name="tbStartupManager"
Width="102"
Style="{StaticResource tabcontrol}"
Header="Restore"
NormalImage="/Wpftabtest;component/Resources/Restore1.png"
SelectedImage="/Wpftabtest;component/Resources/Restore2.png"
HoverImage ="/Wpftabtest;component/Resources/Restore3.png">
</local:cTabitem>
<local:cTabitem x:Name="tbActionCenter"
Width="102"
Style="{StaticResource tabcontrol}"
Header="Settings"
NormalImage="/Wpftabtest;component/Resources/Settings1.png"
SelectedImage="/Wpftabtest;component/Resources/Settings2.png"
HoverImage ="/Wpftabtest;component/Resources/Settings3.png">
</local:cTabitem>
<local:cTabitem x:Name="tbRegistration"
Width="102"
Style="{StaticResource tabcontrol}"
Header="Register Now"
NormalImage="/Wpftabtest;component/Resources/register1.png"
SelectedImage="/Wpftabtest;component/Resources/register2.png"
HoverImage ="/Wpftabtest;component/Resources/register3.png">
</local:cTabitem>
<!--<local:cTabitem Style="{StaticResource tabcontrol}"
Header=""
x:Name="tabExtra"
Width="0"
Cursor="Arrow"
IsTabStop="False">
</local:cTabitem>-->
</TabControl>
我的尝试:
What I have tried:
TabControl x:Name="tabMain"
BorderThickness="1"
Grid.Row="0"
Grid.RowSpan="2"
IsSynchronizedWithCurrentItem="True"
Margin="0"
Padding="0"
Background="#FFFFFF"
>
推荐答案
倾弃代码丢弃问题
这是wpf的最佳实践
不是一个好问题。它太含糊了,我们无法回答它。目前尚不清楚你所指的是什么练习 - 它可以是任何来自
- 你的命名约定(对我来说没问题,至少你没有使用默认名称)
- 在源代码文件中使用缩进(通常的做法)
- 通过使用数据绑定(是的,这是一种很好的做法)
您可以通过一些研究找到更多关于最佳实践的信息 - 尝试 Google [ ^ ]或阅读实用程序员等书籍 [ ^ ]或完成代码 [ ^ ](还有其他人)
is not a good question. It is so vague we cannot possibly answer it. It is not clear what "practice" you are referring to - it could be anything from
- your naming conventions (looks ok to me, at least you haven't used default names)
- to the use of indentation in the source code file (common practice)
- through to the use of data binding (yes, this is good practice)
You can find out more about "best practices" with a little research - try Google[^] or by reading books like The Pragmatic Programmer[^] or Code Complete[^] (there are others)
这篇关于Xaml在WPF中的最佳实践的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!