在控件的编辑/视图模板之间创建和切换

时间:2014-07-25 16:36:52

标签: c# wpf xaml controltemplate visualstatemanager

我有一个用于显示消息的TextBlock。我必须建立编辑和保存此消息的能力。单击编辑图标时,我不想使用TextBox和Save Button弹出另一个视图,而是想以某种方式显示Textbox和Save Button来代替TextBlock。然后单击“保存”时,它将再次更改状态,仅显示只读TextBlock。

我认为我可以使用VisualStateManager执行此操作,但似乎您只能为状态执行Storyboard,即使我始终将按钮保留在那里并使其不可见,我似乎也无法更改状态之间的属性值。

VisualStateManager是这个的答案还是有更好用的东西?

更新 我发现并遵循了这个例子View / Edit Control,看起来它会解决我的问题。

<UserControl x:Class="WpfApplication1.Test2"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:c="clr-namespace:WpfApplication1"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Label Name="MyTest"  c:ReadOnlyControlTemplate.Enabled="True" c:ReadOnlyControlTemplate.DoLock="False" Grid.Column="0" Grid.Row="0" Content="{Binding Path=Message}"  >

        <Control.Template>
            <ControlTemplate TargetType="{x:Type Label}">
                <TextBox Width="{TemplateBinding Property=Width}" Height="{TemplateBinding Property=Height}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" AcceptsReturn="True" Margin="100,0" />

            </ControlTemplate>
        </Control.Template>
        <c:ReadOnlyControlTemplate.LockTemplate>
            <ControlTemplate TargetType="{x:Type Label}">
                <Border BorderBrush="Red" BorderThickness="3">
                    <TextBlock Width="{TemplateBinding Property=Width}" Height="{TemplateBinding Property=Height}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" Foreground="White" />
                </Border>
            </ControlTemplate>
        </c:ReadOnlyControlTemplate.LockTemplate>
    </Label>
    <WrapPanel Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center">
        <Button Content="ReadOnly"   Width="70" Height="25" Click="Button_Click" Margin="0,0,5,0" />
        <Button Content="Edit"  Grid.Column="0" Grid.Row="1" Width="50" Height="25" Click="Button_Click2" />
    </WrapPanel>
</Grid>

0 个答案:

没有答案