2
我有Hyperlink
在Grid
。我將命令綁定到啓用/禁用它的超鏈接。然後我使用該命令禁用它。然後在其父母(Grid
)我設置IsEnabled=False
屬性。之後,我啓用我的超鏈接與我的命令並啓用網格,但超鏈接不會激活!超鏈接無法與關聯的命令正常工作
下面是示例:
Command testCommand = new Command();
public MainWindow() {
InitializeComponent();
hl.Command = testCommand;
}
private void Start(object sender, RoutedEventArgs e) {
//Disable Hyperlink
testCommand.Enabled = false;
//Disable Grid
grid.IsEnabled = false;
//Enable Hyperlink
testCommand.Enabled = true;
//Enable Grid
grid.IsEnabled = true;
//hl.IsEnabled = true; //if uncomment this all will be work
}
XAML:
<Window x:Class="WpfApplication25.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="172"
Width="165">
<StackPanel>
<Grid x:Name="grid">
<TextBlock>
<Hyperlink x:Name="hl">Test</Hyperlink>
</TextBlock>
</Grid>
<Button Content="Start"
Name="button1"
Click="Start" />
</StackPanel>
</Window>
,並註冊一個ICommand:
public class Command : ICommand {
private bool enabled;
public bool Enabled {
get {
return enabled;
}
set {
enabled = value;
if (CanExecuteChanged != null)
CanExecuteChanged(this, EventArgs.Empty);
}
}
public bool CanExecute(object parameter) {
return Enabled;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter) { }
}
更新:
如果超鏈接被替換爲Button,即使其父項被禁用(grid.IsEnabled = false),它也將被啓用。
我看不出有任何命令綁定設置,以實際結合您的testCommand的Execute和CanExecute執行命令本身。你是否只包含這部分代碼?如果您沒有設置命令綁定,則不管任何IsEnabled設置,控件都不會啓動。 –
通過覆蓋「Start」按鈕中命令的綁定,您的XAML將永遠不會收到@DanaCartwright指出的命令通知。 – user7116
我簡化了我的例子。這不是由於'DataBinding'。 –