1
一些上下文:更改輸入形式成顯示形式
用戶將數據輸入到具有多個輸入控制(標準的文本框,組合框等)的窗口。
用戶在-readmode中打開相同的窗口 - 顯示以前輸入的數據。
當然,輸入表單很容易,並且對於readmode我可以使用IsEnabled dependancyproperty來禁用輸入控件。
是否有可能使用Style with Triggers替換所有輸入控件與標籤?
一些上下文:更改輸入形式成顯示形式
用戶將數據輸入到具有多個輸入控制(標準的文本框,組合框等)的窗口。
用戶在-readmode中打開相同的窗口 - 顯示以前輸入的數據。
當然,輸入表單很容易,並且對於readmode我可以使用IsEnabled dependancyproperty來禁用輸入控件。
是否有可能使用Style with Triggers替換所有輸入控件與標籤?
這將在IsReadOnly爲true時將所有文本框轉換爲TextBlocks。正如你猜測的那樣,樣式上有一個觸發器來改變控件模板。
<Window x:Class="SO_Xaml_ReadOnlyInputForm.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding IsReadOnly}"
Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<TextBlock Text="{TemplateBinding Text}"
Width="{TemplateBinding Width}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<CheckBox Grid.Row="0"
IsChecked="{Binding IsReadOnly}"
Content="Is Read-only?" />
<StackPanel Grid.Row="1"
Orientation="Horizontal">
<TextBlock>Item1</TextBlock>
<TextBox Text="{Binding Item1Text}"
Width="100" />
</StackPanel>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Prism.ViewModel;
using Microsoft.Practices.Prism.Commands;
namespace SO_Xaml_ReadOnlyInputForm
{
public class ViewModel : NotificationObject
{
private string _itemText;
private bool _isReadOnly;
public string Item1Text
{
get { return _itemText; }
set
{
_itemText = value;
RaisePropertyChanged(() => Item1Text);
}
}
public bool IsReadOnly
{
get { return _isReadOnly; }
set
{
_isReadOnly = value;
RaisePropertyChanged(() => IsReadOnly);
}
}
public ViewModel()
{
Item1Text = "This is the text";
}
}
}