It took me couple days to figure this out. The requirement needs me to show the images to the listbox. I do already have the ObservableCollection of Images to set as Item Source. Only way to get specified way is through some kind of style. Here I use background of ItemContainerStyle with converter to my custom highlighting on wanted images. Xaml Code follows:
<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  x:Class="SkuMaintain.SKUDetailUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:localFormatter="clr-namespace:SkuMaintain.SkuDetailFormatter" >
<UserControl.Resources>
<localFormatter:SquareBackgroundConverter x:Key="SquareImageConverter"/>
</UserControl.Resources>
<ListBox x:Name="SKUImageListBox" Height="250" Width="600" SelectionMode="Single"  HorizontalContentAlignment="Left" TabIndex="1"
HorizontalAlignment="Left" VerticalAlignment="Top" Margin="3,2,115,0" >
<ListBox.ItemContainerStyle>
 <Style TargetType="ListBoxItem">
 <Setter Property="Background" Value="{Binding Tag,Converter={StaticResource SquareImageConverter}}"></Setter>
 </Style>
</ListBox.ItemContainerStyle>
 <ListBox.ItemsPanel>
 <ItemsPanelTemplate>
  <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="20"/>
 </ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
 <DataTemplate>
  <StackPanel Orientation="Horizontal">
   <StackPanel Orientation="Vertical">
      <Image Source="{Binding Path=Source}"></Image>
   </StackPanel>
  </StackPanel>
 </DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Converter file definition (DetailFomatter.vb)
Imports System.Windows.Data
Imports System.IO
Namespace SkuDetailFormatter
    Public Class SquareBackgroundConverter
        Implements IValueConverter
        Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
            Dim returnValue As String = String.Empty
            Dim img As New SkuOpsSvcRef.SKUImage
            Try
                If value IsNot Nothing Then
                    img = CType(value, SkuOpsSvcRef.SKUImage)
                    If Not img.IsSquare Then
                        returnValue = "Red"
                    End If
                Else
                    returnValue = String.Empty
                End If
            Catch
                returnValue = String.Empty
            End Try
            Return returnValue
        End Function
        Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
            Return Nothing
        End Function
    End Class
End Namespace
Thursday, February 28, 2013
Wednesday, February 20, 2013
Regular Expression - Regex for numeric
Public Function IsNumeric(ByVal inputStr As String) As Boolean
Dim _isNumber As Regex = New Regex("(^[+-]?\d+(,?\d*)*\.?\d*([Ee][+-]\d*)?$)|(^[\(]?[\$]?[+-]?\d?(,?\d*)*\.\d+([Ee][+-]\d*)?[\)]?$)")
Return _isNumber.Match(inputStr).Success
End Function
Public Function IsPositiveNumeric(ByVal inputStr As String) As Boolean
Dim _isNumber As Regex = New Regex("(^[+]?\d+(,?\d*)*\.?\d*([Ee][+]\d*)?$)|(^[\(]?[\$]?[+]?\d?(,?\d*)*\.\d+([Ee][+]\d*)?[\)]?$)")
Return _isNumber.Match(inputStr).Success
End Function
Public Function IsNegative(ByVal inputStr As String) As Boolean
Dim _isNegativeNumber As Regex = New Regex("^[\(]?[\$]?[-]+\d+(,?\d*)*\.?\d*([Ee][-]+\d*)?[\)]?$|^[-]+[\(]?[\$]?\d+(,?\d*)*\.?\d*([Ee][-]+\d*)?[\)]?$")
Return _isNegativeNumber.Match(inputStr).Success
End Function
Silverlight Auto Focus on InputBox of TabItem when TabControl changed.
Private Sub SkuTabControl_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) Handles SkuTabControl.SelectionChanged
If SkuTabControl.SelectedItem IsNot Nothing Then
Dim itemTab As TabItem = SkuTabControl.SelectedItem
Dim itemGrid As Grid = itemTab.Content
AddHandler itemGrid.Loaded, AddressOf itemGrid_Loaded
'itemGrid.LoadedEvent()
End If
End Sub
Private Sub itemGrid_Loaded(ByVal sender As Object, ByVal e As EventArgs)
Dim itemTab As TabItem = SkuTabControl.SelectedItem
Dim itemGrid As Grid = itemTab.Content
Dim customInputBoxes = GetInputBoxControls(itemGrid).OfType(Of CustomTextBox.CustomTextBox)()
Dim cTextBox As CustomTextBox.CustomTextBox
For Each cTextBox In customInputBoxes.ToList
If CType(cTextBox.Background, SolidColorBrush).Color = Color.FromArgb(255, 255, 255, 0) Then
cTextBox.Focus()
Exit For
End If
Next
End Sub
Private Function GetInputBoxControls(ByVal root As DependencyObject) As IEnumerable(Of DependencyObject)
Try
Dim customBoxList As New List(Of DependencyObject)()
customBoxList.Add(root)
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(root) - 1
customBoxList.AddRange(GetInputBoxControls(VisualTreeHelper.GetChild(root, i)))
Next i
Return customBoxList
Catch ex As Exception
Return Nothing
End Try
End Function
Subscribe to:
Comments (Atom)