listbox里面的文本框selectitem ..如何修改文本框内容?

时间:2011-11-28 16:04:24

标签: wpf textbox listbox datatemplate

我有一个库存列表框。当我选择一个项目时,它会显示几个控件来编辑项目的数量或数量。像这样:

<StackPanel HorizontalAlignment="Right" Orientation="Horizontal" >
    <Label Content="Edit Volume:"/>
    <Button Click="bPlus_Click2" Content="+" Height="29" Margin="10,0,0,0" Name="bPlus" Width="29" />
    <TextBox FontSize="16" Height="29" HorizontalContentAlignment="Center" IsReadOnly="True" Name="tNum2" Text="0" VerticalContentAlignment="Center" Width="44" />
    <Button Click="bMinus_Click2" Content="-" Height="29" Name="bMinus" Width="29" />
    <Button Content="OK!"/>
    <StackPanel.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}}}" Value="False">
                    <Setter Property="StackPanel.Visibility" Value="Collapsed"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Style>
</StackPanel>

现在我需要PLUS和MINUS按钮来编辑文本框的内容..我该怎么办?

我找到了方法!! 这就是我所拥有的:

<Window.Resources>
    <DataTemplate x:Key="dtInventory">
        <Border Name="itemBorder" BorderBrush="#FFEBE476" BorderThickness="2" Padding="10" Margin="2" Background="#FF5AB11D">
            <StackPanel x:Name="sp1">
                <StackPanel Orientation="Horizontal" x:Name="spsp1">
                    <StackPanel Width="60">
                        <TextBlock Text="DME Item: "/>
                    </StackPanel>
                    <StackPanel Width="205" x:Name="spsp2">
                        <TextBlock Text="{Binding Path=Name}"/>
                    </StackPanel>
                    <StackPanel Width="60" x:Name="spsp3">
                        <TextBlock Text="Volume: "/>
                    </StackPanel>
                    <StackPanel Width="30" x:Name="spsp4">
                        <TextBlock Text="{Binding Path=Volume}"/>
                    </StackPanel>
                </StackPanel>
                <StackPanel x:Name="sp2" HorizontalAlignment="Right" Orientation="Horizontal" >
                    <Label Content="Edit Volume:" x:Name="l1"/>
                    <myext:IntegerUpDown x:Name="udVolume" Minimum="0" DefaultValue="0"/>
                    <Button Content="OK!" x:Name="bOk" Click="bOk_Click" />
                    <StackPanel.Style>
                        <Style>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}}}" Value="False">
                                    <Setter Property="StackPanel.Visibility" Value="Collapsed"></Setter>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </StackPanel.Style>
                </StackPanel>
            </StackPanel>
        </Border>
    </DataTemplate>
</Window.Resources>

然后是列表框:

<ListBox Height="399" HorizontalAlignment="Left" Margin="462,61,0,0" Name="lInventory" VerticalAlignment="Top" Width="390" ItemsSource="{Binding}" ItemTemplate="{StaticResource dtInventory}">

和.cs:

ListBoxItem selecteditem = lInventory.ItemContainerGenerator.ContainerFromIndex(int.Parse(lInventory.SelectedIndex.ToString())) as ListBoxItem;
        if (selecteditem != null)
        {
            try
            {
                DataTemplate dt = selecteditem.ContentTemplate;
                Border border = VisualTreeHelper.GetChild(selecteditem, 0) as Border;
                ContentPresenter cp = border.Child as ContentPresenter;
                StackPanel sp = dt.FindName("sp1", cp) as StackPanel;
                IntegerUpDown updown = sp.FindName("udVolume") as IntegerUpDown;

                if (updown.Value != 0)
                {
                    Inventory.DMEItems dme = new Inventory.DMEItems();
                    dme.Volume = int.Parse(updown.Value.ToString());
                    dme.DMEInventoryItemID = int.Parse(lInventory.SelectedValue.ToString());
                    dme.UpdateItem();
                    UpdateInventory();
                }
            }
            catch (Exception ex)
            { System.Windows.MessageBox.Show("ERROR: " + ex.Message, "Edit Volume" ,MessageBoxButton.OK, MessageBoxImage.Error); }
        }

我希望它适用于其他人!

1 个答案:

答案 0 :(得分:0)

不幸的是,你无法在xaml开箱即可完成Mathematic oeprations。 但是你可以使用Numeric UpDown控件(例如来自Extented WPF Toolkit)

或者您可以创建自己的UserControl,其中包含两个按钮和文本框以及向上/向下计数的功能。 然后在标记中使用该控件,例如

<StackPanel HorizontalAlignment="Right" Orientation="Horizontal" >
                            <Label Content="Edit Volume:"/>
<local:MyNumericUpDownControl/>

修改

Here's a link关于如何创建自己的数字注册控件