Introduction
CountryFlag is a WPF user control for displaying the flag of any one of the 249 countries and territories assigned with an ISO 3166-1 alpha-2 code.
To get the project code you can clone or download the project from GitHub.
Requirements
Usage
Install the CountryFlag NuGet package by running the following command in the NuGet Package Manager Console,
PM> Install-Package CountryFlag -Version 2.1.0
You can also install it by using the NuGet Package Manager. In Solution Explorer right-click your project, select Manage NuGet Packages, and from the Browse tab search for "countyflag" and install.
When installation is complete you can now add a XAML reference and add the control[s] to a layout control. To specify a flag set the control's Code
property.
<Window x:Class="Flags.MainWindow"
...
xmlns:cf="clr-namespace:CountryFlag;assembly=CountryFlag"
...>
...
<Grid>
<WrapPanel>
<cf:CountryFlag Code="BT" Margin="5"/>
<cf:CountryFlag Code="AF" Margin="5"/>
<cf:CountryFlag Code="AO" Margin="5"/>
<cf:CountryFlag Code="BB" Margin="5"/>
<cf:CountryFlag Code="KE" Margin="5"/>
<cf:CountryFlag Code="BR" Margin="5"/>
<cf:CountryFlag Code="EG" Margin="5"/>
<cf:CountryFlag Code="RS" Margin="5"/>
<cf:CountryFlag Code="SZ" Margin="5"/>
</WrapPanel>
</Grid>
</Window>
The above code declares nine flag controls with their Code
property set to an ISO 3166-1 alpha-2 code . The Code
property is set to a value of type CountryCode
, an enumeration of ISO 3166-1 alpha-2 country codes specified in the control library. The following image shows the result of the above markup, in the artboard of the XAML Designer,
CountryFlag
The code behind for the user control contains a single dependency property and a callback method,
Class CountryFlag
Public Property Code() As CountryCode
Get
Return CType(GetValue(CodeProperty), CountryCode)
End Get
Set(ByVal value As CountryCode)
SetValue(CodeProperty, value)
End Set
End Property
Public Shared CodeProperty As DependencyProperty =
DependencyProperty.Register("Code", GetType(CountryCode), GetType(CountryFlag),
New PropertyMetadata(CountryCode.AD,
New PropertyChangedCallback(AddressOf ChangeFlag)))
Private Shared Sub ChangeFlag(ByVal source As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim countryCode = CType(e.NewValue, CountryCode).ToString()
Dim flag = "Flags/" & countryCode & ".png"
CType(source, CountryFlag).Flag.Source = New BitmapImage(New Uri(flag, UriKind.Relative))
End Sub
End Class
In the callback method the value of the property is used to set the source property of an Image
control.
Conclusion
You can download the sample project from the link at the top of the article page. The project contains the sample code highlighted earlier.
History
- 3rd May 2011: Initial post,
- 30th August 2016: Updated code and flags,
- 30th August 2017: Updated code and flags