我已經重寫了一個ComboBox
爲了在組合結尾添加一個額外的按鈕 - 我使用它來幫助導航我的應用程序。wpf ContentPresenter不會啓用/禁用
它的M-V-VM應用程序具有Edit-Save/Cancel機制,根據用戶是否處於「編輯模式」禁用或啓用控件。我希望無論View是啓用還是禁用,我的導航按鈕始終可用。
爲了達到此目的,我將ToggleButton
和ContentPresenter
綁定到我的Model上的IsEditable
屬性。
切換按鈕啓用和禁用按預期方式,但組合文本保持啓用狀態。
由於文本是由ContentPresenter
交付和ContentPresenter
有IsEnabled
屬性我不明白爲什麼它不會禁用?
任何人都可以協助嗎?謝謝安迪
<Style TargetType="local:EntityCombo">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
<Setter Property="MinWidth" Value="120"/>
<Setter Property="MinHeight" Value="20"/>
<Setter Property="FontSize" Value="12" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:EntityCombo" >
<Grid>
<ToggleButton
IsEnabled="{Binding IsEditable}"
Name="ToggleButton"
Template="{DynamicResource ComboBoxToggleButton}"
Grid.Column="2"
Focusable="false"
IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press">
</ToggleButton>
<Button Grid.Column="2" Style="{DynamicResource EntitySelectedButton}" Command="{TemplateBinding EntitySelected}" CommandParameter="{TemplateBinding SelectedItem}"></Button>
<ContentPresenter
IsEnabled="{Binding IsEditable}"
Name="ContentSite"
IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{DynamicResource SelectionBoxItem}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Margin="3,3,23,3"
VerticalAlignment="Center"
HorizontalAlignment="Left" />
<Popup
Name="Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid
Name="DropDown"
SnapsToDevicePixels="True"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border
x:Name="DropDownBorder"
Background="{StaticResource WindowBackgroundBrush}"
BorderThickness="1"
BorderBrush="{StaticResource SolidBorderBrush}"/>
<ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
</ScrollViewer>
</Grid>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasItems" Value="false">
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="DarkGray"/>
</Trigger>
<Trigger Property="IsEnabled" Value="true">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
<Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
<Setter TargetName="DropDownBorder" Property="CornerRadius" Value="4"/>
<Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
</Style.Triggers>
</Style>
感謝您的建議,但IsEditable是在我的ViewModel這是DataContext。 ToggleButton工作正常,即啓用和禁用 - 它只是ContentPresenter不會啓用/禁用。 – 2009-08-13 15:47:58
對不起 - 我沒有仔細閱讀那部分。這些具有約束力的怪癖可以如此加重。您是否嘗試過爲該綁定啓用跟蹤源(PresentationTraceSources.TraceLevel =「High」),以查看嘗試獲取值時實際發生的情況? – AndyM 2009-08-13 16:09:29
即使我只是將ContentPresenter上的IsEnabled設置爲False,即我根本沒有綁定 - 那麼Text仍顯示爲Enabled! :( – 2009-08-13 16:17:03