我遇到了我正在開發的應用程序中的一種情況。我想寫一個複選框的模板,我應該只能禁用刻度框並保持標籤的啓用。這真的可能嗎?我想出了一個模板,但是當我禁用複選框時,標籤和刻度標記都被禁用。WPF中的複選框模板
回答
只是看看此XAML
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" >
<Window.Resources>
<Style x:Key="CheckBoxFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Border>
<Rectangle Margin="15,0,0,0" Stroke="#60000000" StrokeThickness="1" StrokeDashArray="1 2"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- PressedBrush is used for Pressed in Button, Radio Button, CheckBox -->
<LinearGradientBrush x:Key="PressedBrush" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#BBB" Offset="0.0"/>
<GradientStop Color="#EEE" Offset="0.1"/>
<GradientStop Color="#EEE" Offset="0.9"/>
<GradientStop Color="#FFF" Offset="1.0"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="PressedBorderBrush" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#444" Offset="0.0"/>
<GradientStop Color="#888" Offset="1.0"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="NormalBrush" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#EEE" Offset="0.0"/>
<GradientStop Color="#CCC" Offset="1.0"/>
</LinearGradientBrush>
<SolidColorBrush x:Key="GlyphBrush" Color="#444"/>
<LinearGradientBrush x:Key="NormalBorderBrush" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#CCC" Offset="0.0"/>
<GradientStop Color="#444" Offset="1.0"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="MouseOverBrush" EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFF" Offset="0.0"/>
<GradientStop Color="#AAA" Offset="1.0"/>
</LinearGradientBrush>
<!-- Simple CheckBox -->
<Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="FocusVisualStyle" Value="{DynamicResource CheckBoxFocusVisual}"/>
<Setter Property="Background" Value="{DynamicResource NormalBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource NormalBorderBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<!-- BulletDecorator is used to provide baseline alignment between the checkmark and the Content -->
<BulletDecorator x:Name="test" Grid.Column="0">
<BulletDecorator.Bullet>
<Grid Width="13" Height="13">
<Border x:Name="Border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"/>
<Path x:Name="CheckMark" Stroke="{DynamicResource GlyphBrush}"
StrokeThickness="2"
SnapsToDevicePixels="False" Data="M 0 0 L 13 13 M 0 13 L 13 0"/>
</Grid>
</BulletDecorator.Bullet>
</BulletDecorator>
<ContentPresenter Grid.Column="1"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True"/>
</Grid>
<!-- This uses Visibility to hide and show the CheckMark on IsChecked -->
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="false">
<Setter Property="Visibility" Value="Collapsed" TargetName="CheckMark"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="{DynamicResource MouseOverBrush}" TargetName="Border"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" Value="{DynamicResource PressedBrush}" TargetName="Border"/>
<Setter Property="BorderBrush" Value="{DynamicResource PressedBorderBrush}" TargetName="Border"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" Value="gray" TargetName="Border"/>
<Setter Property="BorderBrush" Value="black" TargetName="Border"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<CheckBox HorizontalAlignment="Left"
Margin="0,5,0,0" Style="{DynamicResource CheckBoxStyle1}"
VerticalAlignment="Top" Width="182" Height="17"
Content="Disabled" IsEnabled="False" IsChecked="True" />
<CheckBox HorizontalAlignment="Left"
Margin="125,5,0,0" Style="{DynamicResource CheckBoxStyle1}"
VerticalAlignment="Top" Width="182" Height="17"
Content="Active" IsEnabled="true" />
</Grid>
我有同樣的問題,並有相當愚蠢的方案上來:
<StackPanel Orientation="Vertical" >
<TextBlock Text="Set Global Edition" TextWrapping="Wrap" HorizontalAlignment="Center" />
<CheckBox x:Name="GlobalEdition" IsChecked="{Binding IsGlobal}" HorizontalAlignment="Center" />
</StackPanel>
由於TextBlock的&複選框被分開,改變複選框的狀態不會影響連接到它的文本。
(如果我記得很清楚,一個文本框不改變其外觀,如果禁用,也許你可以用一個文本框,而不是一個標籤試試)
嗯,我試着用文本框,也沒有運氣。我實際上正在爲它編寫一個模板,當禁用複選框時,整個事件都會被禁用。@ Damascus – Anee 2011-04-06 10:30:53
您是否將文本框放入複選框?因爲這可能是問題所在,如果這是複選框,它將無可否認地與框的狀態相關聯(這實際上是爲什麼我將兩個單獨的控件放在StackPanel中,而不是在checkBox中添加一個textBlock,正如您剛剛看到的那樣,不起作用) – Damascus 2011-04-06 10:52:21
在模板中,我再次放置了文本框和複選框。 @Damascus – Anee 2011-04-06 11:02:14
- 1. WPF:選中/取消選中位於gridview單元格模板中的複選框的所有複選框?
- 2. 已選中複選框WPF
- 3. 從複選框中Django模板
- 4. 複選框綁定不工作在WPF ListView單元格模板
- 5. 帶複選框數據模板的WPF列表框 - 複選框不起作用的綁定內容屬性
- 6. 複選框DataGrid中MVVM WPF
- 7. gridview的foreach複選框頭模板
- 8. WPF複選框排
- 9. 複選框WPF MVVM
- 10. WPF複選框multiBinding
- 11. WPF - 複選框tamplate
- 12. 複選框在WPF
- 13. C#Gridview複選框字段VS(模板字段+複選框)
- 14. WPF取消選擇帶複選框的複選框 - 複選框組合框
- 15. 字典中的組合框(WPF)模板
- 16. 帶複選框的WPF ListView
- 17. WPF分組的複選框
- 18. 控制模板圖形複選框
- 19. 獲取模板複選框名稱
- 20. html問題模板複選框
- 21. 使用模板列中的複選框 - 拒絕多個選擇
- 22. 選擇django模板中的所有複選框
- 23. C#WPF取消選中複選框
- 24. WPF中的多選Select組合框中的複選框的PreviewKeyDown
- 25. 如何在WPF/MVVM中只讀控件模板(對於複選框)?
- 26. WPF datagrid - 如何在模板列中設置複選框而無需綁定?
- 27. 複選框模型中的
- 28. WPF TreeView選擇模板
- 29. 在複選框中設置複選框來檢查wpf
- 30. wpf mvvm中的複選框問題
這工作正是我想要的方式...非常感謝Kishore ... :))@ Kishore – Anee 2011-04-06 12:01:33